2016-12-30 6 views
-1

Я пытаюсь создать патч 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-файл отсутствовал? Как это исправить?

ответ

4

Этот процесс создания патча не работает с использованием файлов MSI со встроенными кабинами или внешними кабинами. Он использует административные образы, созданные вами с помощью msiexec/a ..... Это создает файл MSI вместе со всеми внешними файлами в соответствующих каталогах. Процесс создания патчей использует два из этих изображений администратора для создания патча, файла msp, и он сравнивает каждый соответствующий файл в каждом изображении для создания дельта между двумя продуктами.

Административная установка не является «установкой» - в основном это просто извлечение файлов из MSI в свободные файлы в каталогах. Это также означает, что полученный MSI-файл имеет в нем «нет файлов» - это всего лишь таблицы, поэтому процесс создания патча будет жаловаться, если он обнаружит это или что-либо, указывающее, что файлы находятся в кабине. Для этого нужны отдельные свободные файлы.

После того, как у вас есть два административных изображения, процесс создания патча (с использованием файла PCP) выполняется против двух изображений, сравнивающих каждый файл для изменений и создания фактического патча, файла msp.

(Обратите внимание, что в таблице PCI TargetImages есть параметр IgnoreMissingSrcFiles, который позволяет игнорировать недостающие файлы во время создания патча - было бы бессмысленно иметь этот параметр, если в процессе создания патча использовались файлы CAB, потому что все файлы всегда будут там.)

+0

Я не уверен, какие предположения вы можете иметь, о которых вы не говорите, но создание патчей с использованием изображений администратора не имеет никакого отношения к тому, как устанавливается какой-либо продукт. – PhilDW

+0

Это имеет смысл, спасибо. (Комментарии удалены.) –

 Смежные вопросы

  • Нет связанных вопросов^_^