繁体   English   中英

WiX 工具集中的 ARM64 支持用于为 Surface Pro X 构建吗?

[英]ARM64 support in WiX Toolset for building for Surface Pro X?

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

我使用在官方 WiX 站点上找到的安装程序安装了 WiX 工具集 v4。 然而,尽管我安装了WiX 工具集 Visual Studio 2017 扩展,Visual Studio 2017 仍然没有给我选择 WiX 工具集 v4 安装项目的选项。 我只有 v3 的选项: 没有 wix v4 选项

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

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

如何将 WiX 工具集 v4 支持添加到 Visual Studio 2017? 换句话说,我怎么添加v4在“新建项目”资源管理器窗口下的“维克斯工具箱”选项,如图所示这里

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

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

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

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


编辑 1 - 2/24/2020

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

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

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

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

我确保按照此处所述将InstallerVersion设置为 500。

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

编辑 2 - 2020 年 5 月 27 日

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

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

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

<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>

现在,在我结束之前做一些笔记。 似乎没有一个有效的ProgramFilesArm64FolderProgramFilesArmFolder全局常量,比如x64x86构建(例如分别是ProgramFiles64FolderProgramFilesFolder )。 因此,您必须像这样手动定义:

<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 />定义中,确保将InstallerVersion设置为500 Platform可以保留为$(var.Platform)或者您可以手动输入arm64 对于两个Platform输入,intellisense 都会给它加下划线,但这可以忽略。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM