2015-11-02 5 views
1

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.

Répondre

3

ProductSearch et MsiEnumRelatedProducts recherchez les packages MSI et non les groupes de graver. Une application d'amorçage personnalisée obtient la version des ensembles existants dans son rappel OnDetectRelatedBundle.