J'ai deux MSI; framework.msi
et product.msi
. Le framework.msi
installe des DLL dans le GAC dont dépend le product.msi
pour l'installation et la désinstallation.La mise à niveau de gravure Wix doit désinstaller les deux MSI avant la mise à niveau
J'ai créé un BA qui enchaîne les deux MSI ensemble.
<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>
Pour les nouvelles installations, mon framework.msi
et product.msi
installer correctement. Quand je vais mettre à niveau vers une nouvelle version, il met à jour le framework.msi
avec succès. Ensuite, il désinstalle le product.msi
mais échoue (pour cette erreur: 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.
) car la désinstallation CustomAction
fait référence à une version d'un assembly (CheckInstaller
) qui n'est plus dans le GAC (car elle a été mise à niveau dans le cadre de la mise à niveau framework.msi
) .
Sans avoir à écrire un BA personnalisé, je veux être en mesure de faire quelque chose comme ceci:
// pseudo code
if(product.Exists() && framework.Exists())
{
product.Uninstall(); // product is dependent on the framework
framework.Uninstall();
}
framework.Install();
product.Install();
Je sais que cela serait possible que si nous devions combiner de deux MSI dans un grand produit, mais depuis nous dispersons le framework.msi
à d'autres équipes et pour diverses autres raisons, ils doivent être conservés séparément.
Est ce que je veux faire même possible avec le bootstrappeur WiX?