1

バージョン 1.0.0 と V2.0.0 の製品 A があり、それぞれが WiX ファイルの関連付けを使用してファイル タイプ xyz (実行可能な product.exe) に関連付けられています。製品 A V1.0.0 をインストールすると、ファイル拡張子 xyz が関連付けられます。次に、製品 A V2.0.0 をインストールします。これで、ファイル xyz が製品 A V2.0.0 に関連付けられます。最初に 2.0.0 がインストールされ、その後に V1.0.0 がインストールされている場合、ファイルの関連付けは期待どおりにオーバーライドされます。

V2.0.0 をアンインストールすると、2.0.0 のファイルの関連付けが削除され、V1.0.0 の関連付けが復元されず、その逆も同様です。

WiX を使用して以前のバージョンのファイルの関連付けを自動的に復元するにはどうすればよいですか? 以下の私の WiX コードを見て、可能な修正を提案してください。

製品 A V1.0.0 WiX 3.8 コード:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="PUT-GUID-HERE" Name="Product A 1.0" Language="1033" Version="1.0.0.0" Manufacturer="Microsoft" UpgradeCode="PUT-GUID-HERE">
        <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

        <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
        <MediaTemplate />

        <Feature Id="ProductFeature" Title="Product A 1.0" Level="1">
            <ComponentGroupRef Id="ProductComponents" />
        </Feature>
    </Product>

    <Fragment>
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder">
                <Directory Id="INSTALLFOLDER" Name="Product A 1.0" />
            </Directory>
        </Directory>
    </Fragment>

    <Fragment>
      <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
      <!-- TODO: Remove the comments around this Component element and the ComponentRef below in order to add resources to this installer. -->
        <Component Id="ProductComponent" Guid="PUT-GUID-HERE">
          <File Id="openBox" Source="D:\open-box.ico" />
          <File Id="wpfFile" Source="D:\product.exe" />
          <ProgId Advertise="no" Description="My WPF File" Icon="openBox" Id="xyzFileAssociation_1_0">
            <Extension Id="xyz" ContentType="application/xyz">
              <Verb Id="open" Command="open with my app" Argument="&quot;%1&quot; &quot;1.0.0&quot;" TargetFile="wpfFile"/>
            </Extension>
          </ProgId>
        </Component> 
      </ComponentGroup>
    </Fragment>
</Wix>

製品 A V2.0.0 WiX 3.8 コード:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="PUT-GUID-HERE" Name="Product A 2.0" Language="1033" Version="2.0.0.0" Manufacturer="Microsoft" UpgradeCode="PUT-GUID-HERE">
        <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

        <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
        <MediaTemplate />

        <Feature Id="ProductFeature" Title="Product A 2.0" Level="1">
            <ComponentGroupRef Id="ProductComponents" />
        </Feature>
    </Product>

    <Fragment>
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder">
                <Directory Id="INSTALLFOLDER" Name="Product A 2.0" />
            </Directory>
        </Directory>
    </Fragment>

    <Fragment>
        <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
            <!-- TODO: Remove the comments around this Component element and the ComponentRef below in order to add resources to this installer. -->
             <Component Id="ProductComponent" Guid="PUT-GUID-HERE">
               <File Id="openBox" Source="D:\open-box.ico" />
               <File Id="wpfFile" Source="D:\product.exe" />
               <ProgId Advertise="no" Description="My WPF File" Icon="openBox" Id="xyzFileAssociation_2_0">
                 <Extension Id="xyz" ContentType="application/xyz">
                   <Verb Id="open" Command="open with my app" Argument="&quot;%1&quot; &quot;2.0.0&quot;" TargetFile="wpfFile"/>
                 </Extension>
               </ProgId>
             </Component> 
        </ComponentGroup>
    </Fragment>
</Wix>

唯一の違いは、ProgId の Id wrt ファイルの関連付けにあります。

4

1 に答える 1

0

ファイルの関連付けを変更して、キャプションの一部としてバージョン番号を含めます: xyz1、xyz2 など... 製品を並べてインストールできるようにする場合にのみ、これを行ってください。これにより、製品間の干渉が回避されます。別の方法は、アンインストール時に実行されるカスタム アクションを介してファイルの関連付けを登録し、他のインストールを検索することです。あなたが私に尋ねると、非常に不格好でエラーが発生しやすくなります。私の世界の経験則: 追加のリスクを伴うカスタム ソリューションを避けるために、常にアプリケーションとセットアップの設計の小さな変更に依存することを選択しました。信頼性とシンプルさのための正しい呼び出しである読み取り/書き込みカスタムアクションを確実に回避できる場合.

ソフトウェアの 2 つのバージョンがアクティブに維持されることはめったにないため、サイド バイ サイド インストールは避けたいと考えています。例外は、一般にリリースされたメジャー バージョン、つまりバージョン 1、2、3 などです。そのように言うために、ビルドごとに新しい関連付けを台無しにするつもりはありません。

サイド バイ サイドでインストールする場合は、サイド バイ サイドでインストールされるコンポーネントのすべてのコンポーネント GUID を変更し、サイド バイ サイドでインストールされない共有ファイルに対して適切なマージ モジュールまたは wix インクルードを使用する必要があります (通常はマシンごとに 1 回だけインストールできる COM サーバーなど)。これは、参照カウントが正しく機能するためです。おそらく、この回答はすぐに読む価値があります: Wix でコンポーネントの GUID を変更しますか? . または、リンクされた投稿で説明されているように、自動生成された GUID に依存することをお勧めします。

おそらくこれも見てください:

于 2015-05-02T17:54:09.667 に答える