Я пытаюсь создать патч MSP для программы, которая в настоящее время развернута с использованием пакета MSI. Я смог успешно создать файл PCP, используя следующий (слегка отредактированный) код WiX, основанный на примере из WiX documentation.Попытка удалить сжатие из 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.
Так что я пытался строить несжатую версию MSI, добавив атрибут CompressionLevel к MediaTemplate element в его WXS файла ,
<MediaTemplate EmbedCab="yes" CompressionLevel="none" />
Для создания самой MSI это успех. Полученный файл в 3,7 раза больше размера несжатого оригинала, а 7-Zip показывает файлы в нем как имеющие метод сжатия «Нет». И я могу успешно установить программу на виртуальную машину.
Проблема в том, что тогда я еще получить сообщение об ошибке «PatchWiz не удалось исправить файлы, сжатые в шкафу» при запуске msimsp.
Виновником кажется Сжатым атрибут на WXS Package element:
<Package InstallerVersion="200"
Compressed="yes"
InstallScope="perMachine"
Description="XYZ Installer"/>
Поэтому, естественно, я пытался не меняя Compressed="yes"
к Compressed="no"
(с не других изменений в этот файл WXS). И это «работает», поскольку позволяет msimsp не давать никаких ошибок.
Но это представляет серьезную проблему, когда файл MSI «пуст», его размер был уменьшен примерно с 3,6 МБ до 280 КБ. Просмотр архива в 7-Zip показывает, что он не содержит файлов, которые он должен установить. Просмотр в Orca показывает Media table с одной строкой, содержащей значения DiskId = 1 и LastSequence = 19, но ничего в столбце Кабинета (исходная MSI не имеет автогенератора «# cab1.cab» здесь).
Зачем изменять атрибут сжатия, чтобы CAB-файл отсутствовал? Как это исправить?
Я не уверен, какие предположения вы можете иметь, о которых вы не говорите, но создание патчей с использованием изображений администратора не имеет никакого отношения к тому, как устанавливается какой-либо продукт. – PhilDW
Это имеет смысл, спасибо. (Комментарии удалены.) –