私は 2 つの MSI を持っています。framework.msi
とproduct.msi
。は、インストールとアンインストールの両方で依存する framework.msi
GAC に dllをインストールします。product.msi
2 つの MSI を連結する BA を作成しました。
<Bundle ...>
<Chain>
<PackageGroupRef Id='framework'/>
<PackageGroupRef Id='product'/>
</Chain>
</Bundle>
<Fragment>
<PackageGroup Id="framework">
<MsiPackage Name="Product Framework"
ForcePerMachine="yes"
SourceFile="framework.msi"
Vital="yes"
Cache="no"
Permanent="no"
Compressed="yes"
Visible="yes"/>
</PackageGroup>
<PackageGroup Id="product">
<MsiPackage Name="Product"
ForcePerMachine="yes"
SourceFile="product.msi"
Vital="yes"
Cache="no"
Permanent="no"
Compressed="yes"
Visible="yes"/>
</PackageGroup>
</Fragment>
新規インストールの場合、myframework.msi
およびproduct.msi
install は正しく行われます。新しいバージョンにアップグレードしようとすると、framework.msi
正常にアップグレードされます。その後、 のアンインストールに進みproduct.msi
ますが、失敗します (このエラー: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.IO.FileNotFoundException: Could not load file or assembly 'CheckInstaller, Version=1.0.0.0' or one of its dependencies. The system cannot find the file specified.
)。これは、アンインストールが GAC に存在しないCustomAction
バージョンのアセンブリ ( ) を参照しているためです (アップグレードの一部としてアップグレードされたため)。CheckInstaller
framework.msi
カスタム BA を作成することなく、次のようなことができるようにしたいと考えています。
// pseudo code
if(product.Exists() && framework.Exists())
{
product.Uninstall(); // product is dependent on the framework
framework.Uninstall();
}
framework.Install();
product.Install();
2 つの MSI を 1 つの大きな製品に統合すれば、これは可能になると思いますが、framework.msi
他のチームに分散させたり、その他のさまざまな理由から、それらを分離しておく必要があります。
私がやりたいことは、WiX ブートストラッパーでも可能ですか?