Установщик WIX с загрузчиком WPF не устанавливает переменную% ERRORLEVEL% - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть установщик, написанный на WIX, с загрузчиком WPF. Недавно мы добавили режим установки без вывода сообщений, и нам нужно использовать коды возврата, чтобы указать, какая ошибка произошла во время установки без вывода сообщений, например: неверное имя пользователя или пароль, неверный адрес сервера, неподдерживаемая версия Windows и т. Д.

Мы используем метод Engine.Quit () из Bootstrapper класса для выхода из установщика с кодом выхода. Этот код выхода можно увидеть в журнале установщика:

[5490:4F84][2018-09-14T14:31:03]i007: Exit code: 0x101, restarting: No

Однако, когда я проверяю переменную среды % errorlevel% , она остается неизменной. Использование Environment.Exit () тоже не помогло.

Я подозревал, что MSI может быть ответственным за такое поведение, перезаписывая то, что пыталась установить WIX, но даже принудительное ActionResult.Failure в одном из действий установщика не помогает. Код выхода MSI находится в журнале MSI, но % errorlevel% остается неизменным:

MSI (c) (AC:9C) [14:30:59:133]: MainEngineThread is returning 1603
=== Verbose logging stopped: 2018-09-14  14:30:59 ===

Можно ли заставить WIX установить % errorlevel% в пользовательское значение, и если да, как это можно сделать?

1 Ответ

0 голосов
/ 15 сентября 2018

Значение% ERROPRLEVEL% - это функция, которую вы получаете в средах пакетных файлов (оболочка BAT Windows cmd, а также PowerShell, я полагаю), поэтому вы не увидите это значение вне пакетной среды сценариев. Из вашего поста не ясно, является ли ваша автоматическая установка пакетным скриптом или нет.

Сказав это, процесс установки MSI возвращает стандартные результаты ошибок Windows, которые описаны здесь:

https://docs.microsoft.com/en-us/windows/desktop/Msi/error-codes

поэтому их нельзя настроить. Упомянутые вами конкретные ошибки (например, неверное имя пользователя или неверный адрес сервера) являются ошибками из вашего кода настраиваемого действия в MSI. Люди обычно имеют дело с диагностикой ошибок в пользовательских действиях, используя функции регистрации установщика Windows, чтобы добавить свои сообщения в стандартный файл журнала. Это использует MsiProcessMessage () или эквивалент, как здесь:

https://social.msdn.microsoft.com/Forums/windows/en-US/5698aaee-11e5-4a8c-b307-f96b9eb1884f/writing-custom-messages-to-log-file-of-msi-using-msiprocessmessage?forum=winformssetup

https://docs.microsoft.com/en-us/windows/desktop/msi/sending-messages-to-windows-installer-using-msiprocessmessage

Таким образом, вы не будете получать ошибки, относящиеся к вашим настраиваемым действиям, если не решите записать детали в журнал, как указано выше, или не поместите их где-нибудь, чтобы ваша установка без вывода сообщений могла их увидеть (реестр?).

...