2016-05-11 12 views
1

私は以前のバージョンのMy Bootstrapper Appを保持したいのですが、どうすればいいですか?WIX - 選択的にアンインストールする方法<Bundle>

MSIでアップグレードタグを使用することができ、さまざまなバージョンを識別してアンインストール操作を実行できることがわかっています。

ここで、アップグレードコードを使用する1つ以上のMSIを持つバンドルアプリケーションがあります。新しいビルドを作成するたびに、MSIとこのバンドルアプリケーションをバージョンアップします。それ以降のバージョンのBundle Appのインストールを続行すると、以前のBundleバージョンがアンインストールされます。これは私が望むものではありません。私はバンドルアプリケーションの以前のバージョンを保持したいと思います。

バンドルのUpgradeVersionのようなものがありますか。異なるバージョンを識別し、選択的にアンインストールできますか?

マイバンドルファイルのコードスニペット:

<Bundle Name="myApp" 
      Version="1.0.0.0" 
      Manufacturer="Myself" 
      UpgradeCode="SOME-GUID"> 

      <BootstrapperApplicationRef Id="ManagedBootstrapperApplicationHost" > 
      ... 
      </BootstrapperApplicationRef> 

    <Chain> 
     <PackageGroupRef Id= 'WindowsInstaller45'/> 
     <PackageGroupRef Id ='NetFx45Offline'/> 
     <PackageGroupRef Id ='MY_MSI'/> 
    </Chain> 
</Bundle> 

<Fragment Id ='PkgFragments'> 
<PackageGroup Id ="MY_MSI"> 
     <MsiPackage SourceFile= "$(var.Installer.TargetPath)" 
        Id="MYAPP" 
        Cache ="yes" 
        Visible ="no" 
        DisplayInternalUI ="no" 
        Permanent="no"> 
     <MsiProperty Name='INSTALLLOCATION' Value='[InstallFolder]' /> 
     <MsiProperty Name='SELECT_UNINST' Value='[UninstallPrevVersion]' /> 
     </MsiPackage> 
</PackageGroup> 
</Fragment> 

マイプロダクトWIXファイルのコードスニペット

<Product Id="*" 
      Name="$(var.ProductName)" 
      Version="$(var.ProductVersion)" 
      Manufacturer="$(var.ManufacturerName)" 
      UpgradeCode="$(var.UpgradeCode)"> 

    <Property Id="SELECT_UNINST" Secure="yes">1</Property> 

    <Upgrade Id="SOME-GUID2"> 
     <UpgradeVersion Minimum="0.0.0.0" Maximum="$(var.ProductVersion)" IncludeMinimum="yes" IncludeMaximum="yes" Property="UNINSTALL_PREV_VERSION" /> 
    </Upgrade> 

    <CustomAction Id="UninstPrev" Property="UNINSTALL_PREV_VERSION" Value="0" /> 

    <InstallExecuteSequence> 
     <Custom Action="UninstPrev" Before="InstallInitialize"><![CDATA[SELECT_UNINST <> 1]]></Custom> 
     <RemoveExistingProducts Overridable="no" After="UninstPrev"></RemoveExistingProducts> 
    </InstallExecuteSequence> 

</Product> 
+0

**アップグレード**中にあなたの製品が残っていることを望むことは、アップグレードに伴うものとはまったく逆です。それらを後ろに残したい場合は、それらを同じ製品として扱わずに、新しいアップグレードGUIDと製品GUIDを与えます。各アップグレードGUIDのリストを保存し、削除する場合は、削除する特定のアップグレードGUIDを参照するタグを追加し、BootstrapperApplication dllでOnPlanRelatedBundleを適切に処理します。 –

答えて

1

私も答えとしてこれをあげますよ。

以前のバージョンを削除したくない場合は、新しいバージョンを古いバージョンにアップグレードすることはできません。これは、アップグレードGUIDを変更し、製品GUIDを変更することを意味します。特定のバージョンを削除する必要がある場合は、バンドル定義に<RelatedBundle>としてバンドルを追加し、ブートストラップアプリケーションのOnPlanRelatedBundleを適切に処理します。

<RelatedBundle Action="Detect" Id="$(var.ProductVersion622UpgradeGUID)"/> 

また、あなたもををインストールする任意のMSIパッケージを使用すると、「アップグレード」との除去をしたくない場合は、新しいアップグレードGUIDの同じ動作を採用する必要があります。どのGUIDがリリースされたバージョンであるかのリストを保持します。あなたは、MSIのリリースでは、特定のバージョンを削除したい場合は、私は、この要件は非常に奇妙検討する

<Upgrade Id="$(var.Version6InstallerUpgradeGUID)" > 
    <UpgradeVersion 
     IncludeMaximum ="no" 
     IncludeMinimum="yes" 
     Maximum="6.0.0.1" 
     Minimum="6.0.0.0" 
     MigrateFeatures="no" 
     Property="V6FOUND" 
     OnlyDetect="no" />  
</Upgrade> 

を追加する必要があり、あなたが本当にあなたが本当に行動のこの種をサポートするかどうかによって考えることをお勧め。

また、既存のブートストラップのARPエントリは、インストールした製品がシステム上にあることを必ずしも意味しません。 OnPlanRelatedBundleに常にpRequestedState = RequestState.Present;を設定し、msiパッケージをvisible = "yes"に設定することでこれをテストできます。あなたはARPにリストされている古いバンドルを持っていますが、インストールするパッケージはおそらく新しいバージョンでアップグレードされているので、何も意味を持たないエントリです。

+0

こんにちはブライアン、返信いただきありがとうございます。この要件がかなり奇妙であることは事実です。実際に私たちはインストール中に、特定の以前のバージョンのいくつかをアンインストールするかどうかをユーザーに尋ねています。さて、新しいインストーラに別のGUIDを提供しても、実行時にこれらのIDに対応するを選択的に配置することはできません。MSIは私に[UpgradeVersion]を介してそのオプションを教えてくれますが、似たようなものを見ることはできません Nitin

+0

私の流れは次のようなものです..... WPFでビルドされたカスタムUIをWPFと実際のWixインストーラ。今、ARPのエントリはMSIではなくBundleのエントリでなければなりません(アンインストール時にカスタムUIを表示したいので)。私はただ一つの選択肢を残しました、私はバンドルもアップグレードします。だから、最後にバージョン1.0.0.0をインストールして2.0.0.0をインストールした場合、1.0.0.0をアンインストールするかどうかをユーザに尋ねます。ユーザが「はい」を選択すると、2.0.0.0は以前のバージョン)。 – Nitin

+0

あなたの製品全体を見ることなく、なぜ前のバージョンを残したいのか理解できません。製品のアップグレードでない場合は、アップグレードとして扱い、関連バンドルを使用しないでください。 DetectRelatedBundleを処理し、適切なUI情報を表示し、ユーザーの選択に基づいてOnPlanRelatedBundleイベントを処理して、バンドルのアンインストールまたは放棄を要求します。両方のバンドルに含まれているMSIがアップグレードされている場合は、古いバンドルを実際の製品の後ろに残しても、マシンにインストールされているので、ARPでそれを持つのは何ですか? –

関連する問題