Поддержка ARM64 в WiX Toolset для сборки для Surface Pro X?
С выпуском Microsoft Surface Pro X я собираюсь создать установщик установки MSI для систем ARM. Я смотрел вокруг и, кажется, что WiX Toolset v3 вовсе не имеет поддержки проектов установки ARM. Однако похоже, что WiX v4 действительно имеет поддержку, как описано здесь.
Я установил WiX Toolset v4 с помощью установщика, который можно найти здесь, на официальном сайте WiX. Однако, несмотря на то, что у меня установлено расширение WiX Toolset Visual Studio 2017, Visual Studio 2017 по-прежнему не дает мне возможности выбрать проект установки WiX Toolset v4. У меня есть вариант только для v3:
Я проверил с помощью установщика Visual Studio, что у меня установлены схемы WiX v4:
Я знаю что v4
опция доступна, как описано в других настройках Visual Studio. Например, ответ Ника Нолана на этот вопрос в Stackru ссылается на снимок экрана, где вы можете видеть, что у него есть обаv3
а также v4
параметры, перечисленные в проводнике диалогового окна " Новый проект ".
Как добавить поддержку WiX Toolset v4 в Visual Studio 2017? Другими словами, как мне добавитьv4
в разделе " WiX Toolset " в окне проводника " Новый проект ", как показано здесь?
1 ответ
По словам Кристофера Пейнтера, похоже, что WiX v4 был фактически удален из расширения Visual Studio:
Честно говоря, до WiX 4.0 уйдут годы. Я бы сейчас ни о чем не беспокоился. Фактически, шаблоны WiX v4 были недавно удалены из Votive (расширение Visual Studio), так что это должно дать вам представление о том, насколько далеко они находятся.
После дальнейшего исследования это подтверждается историей фиксации расширения Visual Studio. Коммит #886a974 удаляет вариант v4.
Я посмотрю, смогу ли я снова включить его, чтобы увидеть, смогу ли я создать настройку *.MSI
для систем ARM.
Редактировать 1 - 24.02.2020
Если вы установите предыдущую версию расширения WiX, вы сможете получить доступ к v4
снова без повторной компиляции всего расширения. Самая последняя версия сv4
опция включена v0.9.28.58839. Но перед установкой убедитесь, что вы удалили все существующие расширения, которые могли быть установлены.
После установки этого старого расширения вам нужно будет установить инструменты сборки v4, расположенные здесь. Осталось только открыть Visual Studio и создать новый проект WiX v4.
Теперь, я играл с WiX v4 и даже несмотря на то,Platform
поле в <Package .../>
тег позволяет значение arm
, он не будет успешно скомпилирован. Я все время получал следующую ошибку:
ICE39: значение PID_TEMPLATE в потоке сводной информации недопустимо. Он должен иметь вид "Платформа, Платформа,...;LangID,LangID,...".
(Я убедился, чтоInstallerVersion
до 500, как описано здесь.)
Я объясняю это тем, что в WiX v4 еще не полностью реализована поддержка ARM, и я думаю, что какое-то время так и останется. А пока просто скомпилируйте свои установщики какx86
поскольку Windows для ARM имеет встроенную эмуляцию x86.
Изменить 2 - 5/27/2020
Наконец, в набор инструментов WiX v3 добавлена поддержка ARM
Поддержка ARM (32-разрядная версия) и ARM64 (64-разрядная версия), похоже, только что была добавлена в WiX v3, как отмечено в выпуске №6137 и PR №503. Как отмечено в проблеме, вам необходимо установить WiX v3.14.0.3910. Если у вас есть открытые проекты Visual Studio, убедитесь, что все они закрыты. Кроме того, после установки WiX v3.14 не забудьте нажать кнопку "Доступно обновление", чтобы получить все новые обновления.
Теперь конфигурация сборки по-прежнему не позволяет вам выбирать arm
или arm64
. Вы должны вручную добавить конфигурацию (ы) платформы в свой*.wixproj
файл. По какой-то причине "Windows для ARM" на Surface Pro X выдает ошибку в вашем установщике, если вы собираете его дляarm
(т.е. 32-битная рука) и не будет для 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>
А теперь несколько замечаний, прежде чем я закончу. Кажется, не работаетProgramFilesArm64Folder
или ProgramFilesArmFolder
глобальная константа, такая как для x64
а также x86
сборки (например, ProgramFiles64Folder
а также ProgramFilesFolder
соответственно). В результате вам придется вручную определить это так:
<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
input, intellisense подчеркнет это, но это можно игнорировать.
После всего этого вы теперь сможете создавать установщики ARM64 MSI для компьютеров Surface Pro X!