【问题标题】:How to generate a Visual Studio project with app manifest from Qt?如何从 Qt 生成带有应用程序清单的 Visual Studio 项目?
【发布时间】:2018-10-25 09:11:46
【问题描述】:

我能够从 Qt 生成一个 MSVC 项目 (.vcxproj),但该项目不包含应用程序清单文件 (Package.appxmanifest)。我已经尝试使用 qmake 变量 WINRT_MANIFEST 并确保 CONFIG 包含 embed_manifest_exe 但我一定是误解了一些东西。

我的问题分为两部分:

  1. 如何在我的 Qt 项目中定义应用清单?
  2. 此应用清单如何成为 Qt Creator / qmake 生成的 MSVC 项目的一部分?

我在 Windows 10 上使用 Qt Creator 4.7.1Qt 5.11.2 MSVC2017 64bit,并且我有 Visual已安装 Studio 2017 社区

我已经尝试过的

构建 MSCV 项目

基于 Qt for WinRT documentation 和 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。

阅读 Windows 应用清单上的 Qt 文档

Qt documentation for Windows deployment > Manifest files:

部署使用 Visual Studio 编译的应用程序时,需要执行一些额外的步骤。首先,我们需要复制链接应用程序时创建的清单文件。 ...从 Qt 4.1.3 开始,以下 CONFIG 选项可用于嵌入清单: embed_manifest_dll embed_manifest_exe 这两个选项都默认启用。

因此,据我了解,如果启用了 CONFIG 选项 embed_manifest_exe(默认情况下),那么在运行 qmake 时应该嵌入清单。

Qt documentation for Qmake variables > WINRT_MANIFEST:

指定要传递给应用程序清单的参数。

这些已列出,其中许多有默认值。

那么为什么没有生成应用清单?即使我自己没有指定任何内容,WINRT_MANIFESTCONFIG contains embed_manifest_exe 的组合肯定意味着应该嵌入默认清单。

我也尝试过设置WINRT_MANIFEST 属性(例如WINRT_MANIFEST.publisher),并尝试创建自己的Manifest.xml 并设置WINRT_MANIFEST=Manifest.xml. 但这没有区别。

【问题讨论】:

    标签: windows qt manifest qmake appxmanifest


    【解决方案1】:

    解决方案非常简单且“显而易见”,但由于文档中没有提到它,我没有意识到它的存在。

    问题出在这里:

    我在 Windows 10 上使用 Qt Creator 4.7.1,Qt 5.11.2 MSVC2017 64bit,并且我安装了 Visual Studio 2017 Community。

    应用清单由使用 WinRT 的通用 Windows 平台 (UWP) 应用(例如 Windows 应用商店应用)使用。 Qt 有一套不同的构建工具包。例如 用于 UWP 32 位 (MSVC 2017) 的 Qt 5.11.2。它们使用 mkspecs 开头 winrt- 并在维护工具/安装程序中显示为 UWP x86/64 (MSVC 2017)

    当使用其中一个工具包时,使用默认的 CONFIG 设置 embed_manifest_exe,您将获得一个带有默认清单的 Visual Studio 项目。

    要覆盖默认值,请在 .pro 中指定属性,例如WINRT_MANIFEST.publisher,或者创建一个单独的清单文件并设置WINRT_MANIFEST=path-to-manifest-file。如果是后者,假设你的 manifest 文件是一个与最终 Package.appxmanifest 格式相同的 XML 文件,那么你还需要WINRT_MANIFEST.CONFIG += verbatim

    【讨论】:

    • 我在 VS2017 ce 上的 Web 表单应用程序的应用程序清单遇到了类似的问题。它没有让我选择在 Project-> add item -> web 菜单下添加应用程序清单文件。我需要为我的应用程序提供管理员权限。该怎么办?
    • @AnitaMathew 这个问答是关于在 Qt 中创建并转移到 Visual Studio 的应用程序,而不是在 Visual Studio 中创建的应用程序。
    猜你喜欢
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多