WIX MajorUpgrade и код возврата

Я пишу установщик, который также содержит пакет MSI, созданный с использованием WIX. Я проверяю код возврата после запуска msiexec и пропускаю некоторые коды ошибок. Например, пользователь не должен получать ошибку, если код возврата - 1638 (продукт уже установлен).

Но когда была установлена ​​более старая версия продукта, код возврата - 1603 (неизвестная ошибка). Я также хочу пропустить эту ситуацию (пользователь уже получил более новую версию)

Код Wix

<Upgrade Id="<GUID>">
    <UpgradeVersion Minimum="$(var.product_version)" OnlyDetect="yes" Property="NEWERFOUND" />
    <UpgradeVersion Minimum="0.1.0" IncludeMinimum="yes" Maximum="$(var.product_version)" IncludeMaximum="no" Property="SELFFOUND" />
</Upgrade>

<MajorUpgrade DowngradeErrorMessage=You have installed newer version $(var.product_name)." />

Вопрос в том, как я могу вернуть код, отличный от 1603, когда активированы свойства SELFFOUND или NEWERFOUND.

Обновление: я не хотел влиять на код возврата, я хочу получить соответствующий код вместо общей фатальной ошибки


person se_pavel    schedule 09.07.2012    source источник


Ответы (1)


Вы не можете контролировать код возврата msiexec.exe. Его коды возврата задокументированы и список исчерпывающий. Сервис определяет код выхода в зависимости от статуса установки.

Обновление: единственное, что я могу предложить, - это напрямую использовать функции базы данных:

  1. MsiOpenPackage и
  2. MsiDoAction("FindRelatedProducts") для запуска FindRelatedProducts действие, которое будет оценивать свойства SELFFOUND и NEWERFOUND путем обработки Обновить таблицу.
  3. Затем проанализируйте свойства с помощью MsiGetProperty < / а>.
  4. Закройте пакет с помощью _8 _ .

Используя полученные значения SELFFOUND и NEWERFOUND, вы можете решить, нужно ли вам устанавливать продукт. Если да, вы можете запустить msiexec.exe или использовать MsiInstallProduct.

Заявитель: я никогда не пробовал делать что-либо подобное, и я не уверен, что это сработает. Должно быть, но это непросто.

person Alexey Ivanov    schedule 09.07.2012
comment
Если установлено NEWERFOUND, я получаю 1603 вместо 1638, и я не могу отделить его от ситуации, когда произошла действительно фатальная ошибка - person se_pavel; 09.07.2012
comment
Я предполагаю, что нет простого способа определить, установлена ​​ли более новая версия: дело в том, что DowngradeErrorMessage вызывает завершение пакета с ошибкой, ошибка - установлена ​​более новая версия. - person Alexey Ivanov; 10.07.2012