1

随着 Microsoft 发布 Surface Pro X,我希望为 ARM 系统创建一个 MSI 设置安装程序。我一直在环顾四周,似乎 WiX Toolset v3 不支持ARM 设置项目。但是,看起来 WiX v4 确实具有此处记录的支持。

我使用官方 WiX 站点上的安装程序安装了 WiX Toolset v4 然而,尽管我安装了WiX Toolset Visual Studio 2017 Extension,Visual Studio 2017 仍然没有让我选择 WiX Toolset v4 安装项目。我只有 v3 的选项: 没有 wix v4 选项

我确实通过 Visual Studio 安装程序验证了我确实安装了 WiX v4 架构: 安装了 Visual Studio 的 WiX v4 架构

我知道该v4选项可通过其他 Visual Studio 设置获得。例如,Nick Nolan 在 StackOverflow 上对这个问题的回答链接到一个屏幕截图,您可以在其中看到他在“新项目”对话框资源管理v3器下列出了这两个选项。v4

如何将 WiX Toolset v4 支持添加到 Visual Studio 2017?换句话说,如何在“新建项目”资源管理器窗口中的“ WiX 工具集v4”下添加选项,如此所示?

4

1 回答 1

2

根据 Christopher Painter的说法,WiX v4 似乎实际上已从 Visual Studio 扩展中删除:

老实说,WiX 4.0 还需要几年的时间。我现在完全不会担心它。事实上,WiX v4 模板最近已从 Votive(Visual Studio 扩展)中删除,因此您应该知道它有多远。

经过进一步调查,Visual Studio Extension 的提交历史证实了这一点。提交 #886a974删除了 v4 选项。

我会看看我是否可以重新启用它,看看我是否可以*.MSI为 ARM 系统创建设置。


编辑 1 - 2/24/2020

如果您安装以前版本的 WiX 扩展,您将能够再次访问该v4选项,而无需重新编译整个扩展。v4启用该选项的最新版本是v0.9.28.58839。但是,在安装之前,请确保卸载您可能已安装的任何现有扩展。

安装此扩展后,您必须安装位于此处的 v4 构建工具。剩下要做的就是打开 Visual Studio 并创建一个新的 WiX v4 项目。

现在,我在玩 WiX v4,即使标签Platform中的字段<Package .../>允许 value arm,它也不会成功编译。我不断收到以下错误:

ICE39:摘要信息流中的 PID_TEMPLATE 值无效。它必须是“Platform,Platform,...;LangID,LangID,...”的形式。

我确保按照这里InstallerVersion描述设置为 500。

我将此归结为尚未完全实现 ARM 支持的 WiX v4,我认为它可能会保持这种状态一段时间。同时,只需编译您的安装程序,x86因为 Windows for ARM 内置了 x86 仿真。

编辑 2 - 2020 年 5 月 27 日

ARM 支持终于添加到 WiX v3 工具集中

如issue #6137PR #503所述,对 ARM(32 位)和 ARM64(64 位)的支持似乎刚刚添加到 WiX v3 中。如问题中所述,您必须安装WiX v3.14.0.3910。如果您有任何打开的 Visual Studio 项目,请确保它们都已关闭。此外,一旦您安装了 WiX v3.14,请务必单击“可用更新”按钮以获取任何更新的更新。

现在,构建配置仍然不允许您选择armarm64。您必须手动将平台配置添加到您的*.wixproj文件中。出于某种原因,如果您为(即 32 位 arm)构建 Surface Pro X 上的“ Windows for ARM ”,则安装程序会引发错误,arm而不会为arm64. 因此,这是arm64我添加到*.wixproj文件中的构建配置:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|arm64' ">
    <DefineConstants>Debug</DefineConstants>
    <OutputPath>bin\$(Platform)\$(Configuration)\</OutputPath>
    <IntermediateOutputPath>obj\$(Platform)\$(Configuration)\</IntermediateOutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|arm64' ">
    <OutputPath>bin\$(Platform)\$(Configuration)\</OutputPath>
    <IntermediateOutputPath>obj\$(Platform)\$(Configuration)\</IntermediateOutputPath>
</PropertyGroup>

现在,在我结束之前有几点说明。似乎没有像 for和builds那样的工作ProgramFilesArm64FolderProgramFilesArmFolder全局常量(例如和分别)。因此,您将不得不像这样手动定义它:x64x86ProgramFiles64FolderProgramFilesFolder

<Directory Id="ProgramFilesArm64Folder" Name="Program Files (Arm)">
    <Directory Id="INSTALLFOLDER" Name="!(loc.ProductNameFolder)" />
</Directory>

!(loc.ProductNameFolder)在我的 WiX 本地化文件中定义的语言环境常量在哪里,它定义了我的程序的安装文件夹的名称。)

在 Surface Pro X 上,新的ARM64程序文件文件夹名为“ Program Files (Arm) ”。

最后,在您的<Project />定义中,确保将 设置InstallerVersion500. Platform可以保留原样$(var.Platform),也可以arm64手动输入。对于两个Platform输入,智能感知都会在其下划线,但这可以忽略。

完成所有这些之后,您现在应该可以为 Surface Pro X 机器创建 ARM64 MSI 安装程序了!

于 2020-02-24T02:42:14.703 回答