我正在嘗試爲當前使用MSI程序包進行部署的程序構建MSP修補程序。基於WiX documentation的示例,我已經能夠使用以下(稍微修改過的)WiX代碼成功生成PCP文件。試圖從MSI中刪除壓縮導致其文件消失
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<PatchCreation
Id="D25F1136-2BEE-4A82-9236-7261067D4BDC"
CleanWorkingFolder="yes"
OutputPath="XYZ.pcp"
WholeFilesOnly="yes"
>
<PatchInformation />
<PatchMetadata
AllowRemoval="no"
Classification="Major Upgrade"
Description="XYZ Update"
DisplayName="XYZ Update"
ManufacturerName="XYZ"
MoreInfoURL="http://www.contoso.com/qr/XYZ.html"
TargetProductName="$(var.ProductName)"
/>
<Family Name="PrsnPtch">
<UpgradeImage Id="LatestImage" SourceFile="new_msi_dir\XYZ.msi">
<TargetImage Id="OldImage" Order="1" SourceFile="old_msi_dir\XYZ.msi" />
</UpgradeImage>
</Family>
<PatchSequence PatchFamily="XyzPatch" Supersede="yes" />
</PatchCreation>
</Wix>
和建立腳本設置爲撥打msimsp.exe。
msimsp -s "%PCPDIR%\XYZ.pcp" -p "%PCPDIR%\XYZ.msp" -l "%PCPDIR%\patch.log"
不幸的是,上面的命令失敗,出現以下錯誤信息:
ERROR: UpgradedImages.MsiPath '[...]\XYZ.msi' is marked as having compressed files (PID_WORDCOUNT property of Summary Information stream). PatchWiz is unable to patch files compressed in a cabinet.
所以,我試圖通過添加CompressionLevel屬性的MediaTemplate element在其 WXS文件建立MSI的非壓縮版本。
<MediaTemplate EmbedCab="yes" CompressionLevel="none" />
對於構建MSI本身而言,這是成功的。生成的文件是未壓縮原始文件大小的3.7倍,並且7-Zip將其中的文件顯示爲具有「無」的壓縮方法。我能夠在VM上成功安裝該程序。
問題是,然後我仍然運行msimsp時得到「PatchWiz無法修補文件中壓縮的文件」錯誤。
的罪魁禍首似乎是在WXS Package element壓縮屬性:
<Package InstallerVersion="200"
Compressed="yes"
InstallScope="perMachine"
Description="XYZ Installer"/>
所以很自然,我試圖改變Compressed="yes"
到Compressed="no"
(與沒有其他更改此WXS文件)。而且這個「工作」,只要允許msimsp不給任何錯誤。
但它引入了MSI文件爲「空」的嚴重問題,其大小從大約3.6 MB減少到僅僅280 KB。在7-Zip中查看存檔顯示它不包含任何它應該安裝的文件。在Orca中查看它會顯示一行Media table,其中一行包含值DiskId = 1和LastSequence = 19,但Cabinet列中沒有任何內容(原始MSI在此處具有自動生成的「#cab1.cab」)。
爲什麼要更改壓縮屬性使CAB文件丟失?我如何解決它?
我不確定你可能有什麼假設你沒有談論,但使用管理員映像創建補丁與任何產品的安裝無關。 – PhilDW
這很有道理,謝謝。 (評論刪除。) –