2016-12-30 1 views
-1

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.

だから私はその WXSファイルMediaTemplate elementにがCompressionLevel属性を追加することにより、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"/> 

だから、当然、私は(このWXSファイルへなしその他の変更で)Compressed="no"Compressed="yes"を変えてみました。 msimspがエラーを出さないようにする限り、これは「機能します」。

しかし、MSIファイルが "空"で、サイズが約3.6 MBからわずか280 KBに縮小されているという重大な問題が発生しています。 7-Zipでアーカイブを表示すると、インストールするファイルが含まれていないことがわかります。 Orcaで表示すると、値DiskId = 1とLastSequence = 19が含まれていて、キャビネット列には何も含まれていない行が1行あります(元のMSIには自動生成された「#cab1.cab」があります)。

なぜ圧縮属性を変更すると、CABファイルが失われるのですか?どうすれば修正できますか?

答えて

4

このパッチの作成プロセスは、埋め込みキャビネットまたは外部キャビネットを備えたMSIファイルを使用すると機能しません。これは、msiexec/aを使用して作成した管理イメージを使用します。これにより、適切なディレクトリにあるすべての外部緩いファイルとともにMSIファイルが作成されます。パッチ作成プロセスでは、これらの管理イメージのうちの2つを使用してパッチ、mspファイルを生成し、各イメージの対応する各ファイルを比較して2つの製品間のデルタを作成します。

管理インストールは「インストール」ではなく、主にMSIからディレクトリ内の緩いファイルにファイルを抽出するだけです。これは結果として得られるMSIファイルに "ファイルがない"とマークします。それは単なるテーブルなので、パッチの作成プロセスは、ファイルがキャブ内にあることを示すものが見つかった場合にエラーを出します。個別の緩いファイルが必要です。

2つの管理イメージがあると、(PCPファイルを使用して)パッチ作成プロセスが、各ファイルを比較して実際のパッチであるmspファイルを生成する2つのイメージに対して実行されます。

(PCP TargetImagesテーブルにIgnoreMissingSrcFilesの設定があり、パッチの作成中に欠落したファイルを無視することができます。パッチの作成プロセスでCABファイルを使用した場合ファイルは常にそこに存在します)。

+0

私は、あなたが話していないことを前提にしていないかもしれませんが、管理イメージを使用してパッチを作成することは、製品のインストール方法とは関係ありません。 – PhilDW

+0

それは感謝します、ありがとう。 (コメントは削除されました。) –

関連する問題