2012-03-06 16 views
4

私は簡単なインストーラパッケージを提供しようとしています以前のすべてのパッチを置き換える更新プログラム(パッチ)でサポートしたいと思っていたMSI(MSI)私はMSI V1.0.0と2つのパッチV1.0.1とV1.0.2を持っています。以前のパッチがすでにシステムに適用されているかどうかにかかわらず、最新のパッチをインストールするだけで済みます。私のプロジェクトには2つの機能(クライアントとサーバー)が含まれています。パッチの基礎は常にRTMパッケージ(HelloWorld 1.0.msi/HelloWorld 1.0.wixpdb)です。WiX:以前のバージョンに置き換わるパッチインストーラ(1.0.0 - > 1.0.1,1.0.0 - > 1.0.2,1.0.1 - > 1.0.2、aso)

すべてのパッチの生成(ビルド)が機能するので、1.0.1 - > 1.0.1 - > 1.0.1と1.0.0 - > 1.0.2のアップデート手順は同じですが、1.0.1から1.0にアップデートしようとします。 2アップグレードの対象となるプログラムが見つからないか、またはアップグレードのパッチによって異なるバージョンのプログラムが更新される可能性があるため、Windowsインストーラサービスでアップグレードパッチをインストールすることはできません。お使いのコンピュータにアップグレードされており、正しいアップグレードパッチが適用されていることを確認してください。 "さらに悪いことに、1.0.2がすでにインストールされているシステムで1.0.1パッチを実行すると、パッチは既存のインストールを古いバージョンで上書きします!私は完全に混乱しています...

私はまた、パッチに関するWeb上のいくつかのブログエントリを見つけましたが、私の代わりのszenarioで動作するものはありません。

のWiXのパッチコード - "patch1.wxs":

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Patch 
     AllowRemoval="yes" 
     Manufacturer="My Company" 
     MoreInfoURL="http://www.mycompany.com/" 
     DisplayName="HelloWorld V1.0 Patch 1" 
     Description="Patch intaller updating HelloWorld V1.0.x to V1.0.1" 
     Classification="Update"> 

    <Media Id="32000" Cabinet="HelloWorldRTM.cab"> 
     <PatchBaseline Id="HelloWorldRTM"> 
     <Validate ProductId="yes" UpgradeCode="yes" ProductVersionOperator="LesserOrEqual" /> 
     </PatchBaseline> 
    </Media> 

    <PatchFamilyRef Id="HelloWorldPatchFamily"/> 
    </Patch> 

    <Fragment>  
    <PatchFamily Id='HelloWorldPatchFamily' Version='1.0.1.0' Supersede='yes'> 
     <PropertyRef Id="ProductVersion"/> 
     <ComponentRef Id="HelloWorldServer.dll"/> 
    </PatchFamily> 
    </Fragment> 
</Wix> 

パッチ1つのビルドスクリプト - "generate_patch1.bat":

"%WIX%\bin\torch.exe" -p -xi ".\_Distrb\HelloWorld 1.0.wixpdb" ".\_Distrb\HelloWorld 1.0.1.wixpdb" -out ".\_Build\patch1.wixmst" 
"%WIX%\bin\candle.exe" -out ".\_Build\patch1.wixobj" ".\patch1.wxs" 
"%WIX%\bin\light.exe" ".\_Build\patch1.wixobj" -out ".\_Build\patch1.wixmsp" 
"%WIX%\bin\pyro.exe" ".\_Build\patch1.wixmsp" -out ".\_Distrb\HelloWorld 1.0 Patch1.msp" -t HelloWorldRTM ".\_Build\patch1.wixmst" 

WiXのパッチ適用コード - "patch2.wxs":

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Patch 
     AllowRemoval="yes" 
     Manufacturer="My Company" 
     MoreInfoURL="http://www.mycompany.com/" 
     DisplayName="HelloWorld V1.0 Patch 2" 
     Description="Patch intaller updating HelloWorld V1.0.x to V1.0.2" 
     Classification="Update"> 

    <Media Id="32000" Cabinet="HelloWorldRTM.cab"> 
     <PatchBaseline Id="HelloWorldRTM"> 
     <Validate ProductId="yes" UpgradeCode="yes" ProductVersionOperator="LesserOrEqual" /> 
     </PatchBaseline> 
    </Media> 

    <PatchFamilyRef Id="HelloWorldPatchFamily"/> 
    </Patch> 

    <Fragment> 
    <PatchFamily Id='HelloWorldPatchFamily' Version='1.0.2.0' Supersede='yes'>  
     <PropertyRef Id="ProductVersion"/> 
     <ComponentRef Id="HelloWorldServer.dll"/> 
     <ComponentRef Id="HelloWorld.exe"/> 
    </PatchFamily> 
    </Fragment> 
</Wix> 

パッチ2ビルドスクリプト - "generate_patch2.bat":

"%WIX%\bin\torch.exe" -p -xi ".\_Distrb\HelloWorld 1.0.wixpdb" ".\_Distrb\HelloWorld 1.0.2.wixpdb" -out ".\_Build\patch2.wixmst" 
"%WIX%\bin\candle.exe" -out ".\_Build\patch2.wixobj" ".\patch2.wxs" 
"%WIX%\bin\light.exe" ".\_Build\patch2.wixobj" -out ".\_Build\patch2.wixmsp" 
"%WIX%\bin\pyro.exe" ".\_Build\patch2.wixmsp" -out ".\_Distrb\HelloWorld 1.0 Patch 2.msp" -t HelloWorldRTM ".\_Build\patch2.wixmst" 
+0

パッチの作成には、「パッチ作成プロパティの使用」または「Purely WiXの使用」という2つの方法があります。 「Purely WiXの使用」(使用方法)に問題があった後は、問題なく「パッチ作成プロパティの使用」を使用します。リンク:http://wix.sourceforge.net/manual-wix3/patching.htm –

+0

これをどのように解決しましたか? – boli

+0

@boli:残念ながら。私たちはそれを却下し、現在はアンインストールして、エレガントではないにもかかわらず動作するすべてのものを再インストールします。 :(+ – moik

答えて

1

私も同様の問題がありましたが、パッチwxsに適切な検証を加えて修正しました。あなたがインストールリビジョン番号は、パッチのリビジョン番号よりも大きい場合、あなたは「更新」にPRODUCTVERSIONを変更したいとPRODUCTVERSIONを設定する可能性があるパッチが動作しない場合

<Media Id="32000" Cabinet="HelloWorldRTM.cab"> 
    <PatchBaseline Id="HelloWorldRTM"> 
    <Validate ProductId="yes" UpgradeCode="yes" ProductVersion="Major" ProductVersionOperator="GreaterOrEqual" /> 
    </PatchBaseline> 
</Media> 

...これを試してみてください「GreaterOrEqual」に変更します。

私はそれがあなたのために働くことを望みます!

関連する問題