J'essaie de détecter le numéro de version d'un ensemble précédemment installé. Cependant, la gravure ne semble pas le trouver, bien qu'elle détecte de façon appropriée qu'elle va effectuer une mise à jour majeure.Détection de la version précédente de l'ensemble avec Wix Burn
C'est ce que les parties pertinentes du paquet mon xml ressemble:
<?define BUNDLE_UPGRADE_CODE=my_upgrade_code_guid?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<Bundle UpgradeCode="$(var.BUNDLE_UPGRADE_CODE)" DisableModify="yes" ...>
<util:ProductSearch UpgradeCode="$(var.BUNDLE_UPGRADE_CODE)" Variable="PreviousVersion" />
<BootstrapperApplicationRef ... />
<Chain>
<ExePackage Id="my_exe_package".../>
<MsiPackage Id="my_msi_package" .../>
</Chain>
</Bundle>
</Wix>
La pensée étant que ProductSearch doit détecter tout produit en utilisant le code de mise à niveau et placez le numéro de version dans la PreviousVersion
variable pour une utilisation ultérieure. Cependant, la gravure ne semble pas détecter de produit existant avec ce code de mise à niveau, mais définit toujours la version sur "0.0.0.0
". Voici les parties pertinentes du fichier journal (quelque peu modifié pour plus de clarté):
...: Detect begin, 2 packages
...: Product or related product not found: {my_upgrade_code_guid}
...: Setting version variable 'PreviousVersion' to value '0.0.0.0'
...: Detected related bundle: {previous_bundle_product_code}, type: Upgrade, scope: PerMachine, version: 1.0.0.0, operation: MajorUpgrade
...: Detected related package: {previous_msi_product_code}, scope: PerMachine, version: 1.0.0.0, language: 0 operation: MajorUpgrade
...: Detected package: my_exe_package, state: Absent, cached: Complete
...: Detected package: my_msi_package, state: Absent, cached: None
...: Detect complete, result: 0x0
...: Plan begin, 2 packages, action: Install
...: Skipping dependency registration on package with no dependency providers: my_exe_package
...
...: Planned package: my_exe_package, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: None, cache: No, uncache: No, dependency: None
...: Planned package: my_msi_package, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, cache: Yes, uncache: No, dependency: Register
...: Planned related bundle: {previous_bundle_product_code}, type: Upgrade, default requested: Absent, ba requested: Absent, execute: Uninstall, rollback: Install, dependency: None
...: Plan complete, result: 0x0
Si je demande « manuellement » pour les produits en utilisant le code de mise à niveau à l'aide MsiEnumRelatedProducts
je trouve peux pas, alors que l'interrogation du code de mise à niveau le paquet msi renvoie correctement le produit msi.
Mes attentes sont-elles perdues? Dans ce cas, je peux partir avec l'interrogation du code de mise à jour msi, car cette version sera toujours la même pour moi. Je suis plus intéressé par pourquoi cela ne fonctionne pas comme je le pensais.