Я могу создать проект MSVC (.vcxproj) из Qt, но проект не содержит файла манифеста приложения (Package.appxmanifest). Я попытался использовать переменную qmake WINRT_MANIFEST и убедиться, что CONFIG включает embed_manifest_exe, но я, должно быть, что-то неправильно понимаю.
Мой вопрос состоит из 2 частей:
- Как я могу определить манифест приложения в моем проекте Qt?
- Как этот манифест приложения может стать частью проекта MSVC, созданного Qt Creator / qmake?
Я использую Qt Creator 4.7.1, Qt 5.11.2 MSVC2017 64bit в Windows 10, и у меня есть сообщество Visual Studio 2017 установлен.
Что я уже пробовал
Создание проекта MSCV
На основе документации Qt для WinRT и справки от Сообщество Qt, я запускаю следующее (через QMAKE_POST_LINK
, установленное в моем .pro
):
windeployqt --release --compiler-runtime --qmldir path-to-my-qml-files
qmake -tp vc path-to-my-.pro -o path-to-build-folder/target-name.vcxproj CONFIG+=release
Они успешно создают проект MSVC, а папка выпуска содержит все библиотеки, необходимые для развертывания, и файл vcredist_xxx.exe.
Чтение документации Qt в манифесте приложения Windows
Документация Qt для развертывания Windows> Файлы манифеста:
При развертывании приложения, скомпилированного с помощью Visual Studio, необходимо предпринять некоторые дополнительные шаги. Во-первых, нам нужно скопировать файл манифеста, созданный при связывании приложения. … Начиная с Qt 4.1.3, для встраивания манифестов доступны следующие опции CONFIG:
embed_manifest_dll
embed_manifest_exe
Обе опции включены по умолчанию.
Итак, насколько я понимаю, если опция CONFIG embed_manifest_exe
включена, а она включена по умолчанию, то манифест должен быть встроен при запуске qmake.
Документация Qt для переменных Qmake> WINRT_MANIFEST:
Задает параметры, передаваемые в манифест приложения.
Они перечислены, многие из которых имеют значения по умолчанию.
Так почему же не создается манифест приложения? Даже если я сам ничего не укажу, несомненно, комбинация WINRT_MANIFEST
и CONFIG contains embed_manifest_exe
должна означать, что манифест по умолчанию должен быть встроен.
Я также попытался установить свойства WINRT_MANIFEST
(например, WINRT_MANIFEST.publisher
), и я попытался создать свой собственный Manifest.xml и установить WINRT_MANIFEST=Manifest.xml.
Но это не имеет значения.
Решение очень простое и «очевидное», но, поскольку оно не упоминается в документации, я не осознавал, что оно существует.
Проблема здесь:
Манифест приложения используется приложениями универсальной платформы Windows (UWP), которые используют WinRT (например, приложения из Магазина Windows). В Qt для них есть другой набор сборочных комплектов. Например, Qt 5.11.2 для 32-разрядной версии UWP (MSVC 2017). Они используют
mkspecs
startwinrt-
и отображаются в средстве обслуживания / установщике как UWP x86 / 64 (MSVC 2017).При использовании одного из этих наборов с параметром CONFIG по умолчанию
embed_manifest_exe
вы получите проект Visual Studio с манифестом по умолчанию.Чтобы переопределить значения по умолчанию, укажите атрибуты в .pro, например.
WINRT_MANIFEST.publisher
или создайте отдельный файл манифеста и установитеWINRT_MANIFEST=path-to-manifest-file
. В последнем случае, если ваш файл манифеста представляет собой XML-файл той же формы, что и окончательный Package.appxmanifest, вам также понадобитсяWINRT_MANIFEST.CONFIG += verbatim
.У меня аналогичная проблема с манифестом моего приложения веб-форм на VS2017 ce. Он не дает мне возможности добавить файл манифеста приложения в меню Project- ›Добавить -› веб-меню. Мне нужно предоставить права администратора для моего приложения. Как это сделать? — person Paul Masri-Stone; 18.01.2019
@AnitaMathew Эти вопросы и ответы касаются приложений, созданных в Qt и перенесенных в Visual Studio, а не приложений, созданных в Visual Studio. — person Paul Masri-Stone; 18.01.2019