パッチは、1つあるいはもっと多くのペアの Windows Installer パッケージの間の 差分を 含んでいます。 Windows SDK 中のツール PatchWiz.dll は、パッケージのペアを比較し、Patch Creation Properties (PCP) ファイルと呼ばれるファイルを使って パッチを作ります。( 訳注: MSDN Windows Installer Development Tools 参照。)
パッチをビルドする為の最新のツールを入手する為に 最新の Windows SDK をダウンロードする事が 推奨されています。
( 訳注:
現在最新の Windows Installer SDK は
Windows SDK 7(2009 Aug.) に入っています。ただし
こちら 参照。その前は
Windows SDK 6.1(2008 Feb.) です。
Platform SDK R2(2006 Mar.) に Windows Installer 3.1 SDK が入っている事を 確認しました。
こちら古い方の場合には、Patchwiz.dll(サンプル フォルダ内) のビルドに Visual C++ などが 必要です。
こちらで必要な環境を確認して、
より新しい Windows SDK を使うか、また同時に お持ちの Visual Studio を使うか
Visual C++ Express を試して下さい。)
Patch Creation Properties (PCP) ファイルは、PatchWiz.dll に 1つあるいはもっと多くのペアの パッケージでの差分から パッチを生成する事を指示します。パッチは ターゲットと アップグレード パッケージの間の差分を含み、ターゲット パッケージをアップグレード パッケージに 変換します。 ターゲット パッケージとアップグレード パッケージの両方が 下で作られています。
サンプルを実行するつもりのディレクトリーを作る。これは サンプルのルートになります。
md C:\sample
サンプル ルートの下で "1.0" と "1.1" と名付けられた サブディレクトリーを2つ作る。
md C:\sample\1.0 md C:\sample\1.1
"1.0" ディレクトリーの中で Sample.txt と名付けられた テキストファイルを作り、 その中に それが 1.0 バージョンのファイルであると 知らせるテキストを いくつか置く。
echo This is version 1.0 > C:\sample\1.0\Sample.txt
"1.1" ディレクトリーの中で Sample.txt と名付けられた テキストファイルを作り、 その中に それが 1.1 バージョンのファイルであると 知らせるテキストを いくつか置く。
echo This is version 1.1 > C:\sample\1.1\Sample.txt
サンプル ルート フォルダーで、以下の内容で Product.wxs と名付けられたプロダクト オーサリングを作る:
<?xml version="1.0" encoding="UTF-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <Product Id="48C49ACE-90CF-4161-9C6E-9162115A54DD" Name="WiX Patch Example Product" Language="1033" Version="1.0.0" Manufacturer="Dynamo Corporation" UpgradeCode="48C49ACE-90CF-4161-9C6E-9162115A54DD"> <Package Description="Installs a file that will be patched." Comments="This Product does not install any executables" InstallerVersion="200" Compressed="yes" /> <Media Id="1" Cabinet="product.cab" EmbedCab="yes" /> <FeatureRef Id="SampleProductFeature"/> </Product> <Fragment> <Feature Id="SampleProductFeature" Title="Sample Product Feature" Level="1"> <ComponentRef Id="SampleComponent" /> </Feature> </Fragment> <Fragment> <DirectoryRef Id="SampleProductFolder"> <Component Id="SampleComponent" Guid="{C28843DA-EF08-41CC-BA75-D2B99D8A1983}" DiskId="1"> <File Id="SampleFile" Name="Sample.txt" Source=".\$(var.Version)\Sample.txt" /> </Component> </DirectoryRef> </Fragment> <Fragment> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="ProgramFilesFolder" Name="PFiles"> <Directory Id="SampleProductFolder" Name="Patch Sample Directory"> </Directory> </Directory> </Directory> </Fragment> </Wix>
サンプル ルート フォルダーで、以下の内容で Patch.wxs と名付けられた Patch Creation Properties (PCP) オーサリングを作る:
<?xml version="1.0" encoding="utf-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <PatchCreation Id="224C316C-5894-4771-BABF-21A3AC1F75FF" CleanWorkingFolder="yes" OutputPath="patch.pcp" WholeFilesOnly="yes" > <PatchInformation Description="Small Update Patch" Comments="Small Update Patch" ShortNames="no" Languages="1033" Compressed="yes" Manufacturer="Dynamo Corp"/> <PatchMetadata AllowRemoval="yes" Description="Small Update Patch" ManufacturerName="Dynamo Corp" TargetProductName="Sample" MoreInfoURL="http://www.dynamocorp.com/" Classification="Update" DisplayName="Sample Patch"/> <Family DiskId="5000" MediaSrcProp="Sample" Name="Sample" SequenceStart="5000"> <UpgradeImage SourceFile="C:\sample\1.1\admin\product.msi" Id="SampleUpgrade"> <TargetImage SourceFile="C:\sample\1.0\admin\product.msi" Order="2" Id="SampleTarget" IgnoreMissingFiles="no" /> </UpgradeImage> </Family> <PatchSequence PatchFamily="SamplePatchFamily" Sequence="1.0.0.0" Supersede="yes" /> </PatchCreation> </Wix>
SequenceStart は、ターゲット パッケージの File テーブルでの最後のシーケンスより 大きいものでなければならず、さもないと パッチはインストールされない 事に注意して下さい。
コマンド プロンプトを開いて、以下の WiX と Windows Installer SDK のツールが パスの中にある事を 確認して下さい。
candle.exe -dVersion=1.0 product.wxs light.exe product.wixobj -out 1.0\product.msi
管理インストールを行うのに Msiexec.exe が使用されていますが、実際には システムには 何も登録されていません。主にファイルの展開です。
msiexec.exe /a 1.0\product.msi /qb TARGETDIR=C:\sample\1.0\admin
candle.exe -dVersion=1.1 product.wxs light.exe product.wixobj -out 1.1\product.msi
msiexec.exe /a 1.1\product.msi /qb TARGETDIR=C:\sample\1.1\admin
Patch.wxs ファイルは PCP ファイルにコンパイルされ、そして、それは パッチ パッケージを 作るのに MsiMsp.exe によって処理されています。
candle.exe patch.wxs light.exe patch.wixobj -out patch\patch.pcp msimsp.exe -s patch\patch.pcp -p patch\patch.msp -l patch.log
パッチが働く事を実証するため、プロダクトとパッチをインストールします。
msiexec.exe /i 1.0\product.msi /l*vx install.log
"Program Files\Patch Sample Directory" に行き、Sample.txt を開く。 これが 1.0 バージョンである事を確かめ、Sample.txt を閉じる。
msiexec.exe /p patch\patch.msp /l*vx patch.log
"Program Files\Patch Sample Directory" に行き、Sample.txt を開く。 これが今 1.1 バージョンである事を確かめ、Sample.txt を閉じる。
Windows XP Service Pack 2 と Windows Server 2003 では、コントロールパネルの 「プログラムの追加と削除」に行き「更新プログラムの表示」にチェックが入っている事を 確認する。Windows Vista 以降では、コントロールパネルの「プログラムと機能」そして 「インストールされた更新プログラム」に行く。"WiX Patch Example Product" の下から "Sample Patch" を選んで、削除ボタンをクリックします。
"Program Files\Patch Sample Directory" に行き、Sample.txt を開く。 これが再び 1.0 バージョンである事を確かめ、Sample.txt を閉じる。
Windows XP Service Pack 2 と Windows Server 2003 では、コントロールパネルの 「プログラムの追加と削除」に行く。Windows Vista 以降では、コントロールパネルの 「プログラムと機能」そして「プログラムのアンインストール」に行く。 "WiX Patch Example Product" を選んで、削除ボタンをクリックします。
パッチインストールの間 問題を避けるには パッチはどのようにビルドされていなければならないか における 制限を再検討して下さい。