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