Определение предыдущей версии пакета с помощью Wix Burn

Я пытаюсь определить номер версии ранее установленного пакета. Однако Burn, похоже, не находит его, хотя правильно определяет, что собирается сделать серьезное обновление.

Вот как выглядят соответствующие части моего пакета xml:

<?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>

Идея заключается в том, что ProductSearch должен обнаруживать любой продукт, использующий код обновления, и помещать номер версии в переменную PreviousVersion для последующего использования. Однако, похоже, что Burn не обнаруживает никаких существующих продуктов с этим кодом обновления, вместо этого он всегда устанавливает версию «0.0.0.0». Вот соответствующие части файла журнала (несколько отредактированные для ясности):

...: 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

Если я «вручную» запрашиваю продукты, используя код обновления, используя MsiEnumRelatedProducts, я также не могу его найти, тогда как запрос кода обновления из пакета msi правильно возвращает продукт msi.

Не оправдались ли мои ожидания? В этом случае я могу вместо этого запросить код обновления msi, так как эта версия всегда будет для меня одинаковой. Меня больше интересует, почему это не работает, как я думал.


person villintehaspam    schedule 02.11.2015    source источник


Ответы (1)


ProductSearch и MsiEnumRelatedProducts ищут пакеты MSI, а не пакеты Burn. Пользовательское приложение начальной загрузки получает версию существующих пакетов в своем обратном вызове OnDetectRelatedBundle.

person Bob Arnson    schedule 02.11.2015