2016-10-21 20 views
1

インストーラを作成しようとしている2つの製品があります。どちらの製品も、第3の製品バンドルを要件とするワックスバンドルです。Wix ExePackage Side by Sideアンインストールなしでインストール

理想的には私はあなたがいずれかをインストールする際に起こるしたいものです。

  • Product3がインストールされていない場合は、それがあるべき。
  • Product3がインストールされ、インストールされているバージョンがそれより高いか、または同じものは何もしません。
  • Product3がインストールされ、インストールされているバージョンが低い場合は、アップグレードします。
  • アンインストールしてもproduct1または2がインストールされている場合は、product3をアンインストールしないでください。

これまでのところ、私はこれらの点のいくつかを克服することができましたが、すべてを同時に征服することはできませんでした。

元私は、ProductSearchを使用してインストールされたバージョンを取得し、InstallCommandを使用してみました。しかし、installcommandは「要求されたインストール状態」に似ているため、アンインストールする際に問題が発生しました。同じバージョンを検出したときにインストールしたくない場合は、実際にアンインストールを開始します。

私は、この同様の答えを見てみました:

How to avoid uninstalling previously installed ExePackage (redistributables) while installing a WiX Bundle?

provideskeyrequires要素を使用して提案したが、私は全くその上の任意の有用な文書を見つけることができません。私はそれを試してみましたが、何もしないようです。

私はRelatedBundleを見ましたが、それは私が後になっているかどうかはわかりません。修正システムをより対象としているようだ。

これは、カスタムアクションに頼ることなくこれを行う方法があることを望んでいました。

答えて

1

多くの試行錯誤の末、私はDependencyExtensionの働きを理解しました。

以下の例では、ProductCはWix Bundle実行可能ファイルです。このバンドルにはMSIファイルが含まれています。私は、既にインストールされているかどうかを検出するために、そのMSIファイル(バンドルではない)のアップグレードコードを探すためにproductSearchを使用します。あなたのバンドル・プロジェクトAのためのファイルおよびBでは

<Wix xmlns:dep="http://schemas.microsoft.com/wix/DependencyExtension" 
    xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> 
    <Bundle> 
     <util:ProductSearch Id="ProductCInstallSearch" 
          UpgradeCode="{ProductC_MSI_UpgradeCode_GUID}" 
          Variable="ProductCInstalled" 
          Result="state"/> 
     <dep:Requires Id="ProductCRequired" ProviderKey="ProductC"/> 
     <Chain> 
      <PackageGroupRef Id="ProductC_pkg"/> 
     </Chain> 
    </Bundle> 
    <Fragment Id="Required_Pkgs"> 
     <PackageGroup Id="ProductC_Pkg"> 
      <ExePackage Id="ProductC_Bundle" 
         Permanent="no" 
         DetectCondition="NOT ProductCInstalled = 2" 
         InstallCommand="/quiet" 
         UninstallCommand="/uninstall /quiet"> 
       <dep:Provides Key="ProductC" 
           Version="0.0.0.0"> 
        <dep:RequiresRef Id="ProductCRequired"/> 
       </dep:Provides> 
      </ExePackage> 
     </PackageGroup> 
    </Fragment> 
</Wix> 

今、あなたは任意の配置でAとBをインストールすることができますし、最後の1がアンインストールされたときに、製品Cをアンインストールする場合にのみ削除されます。

関連する問題