带WPF引导程序的WIX Installer未设置%ERRORLEVEL%变量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带WPF引导程序的WIX Installer未设置%ERRORLEVEL%变量相关的知识,希望对你有一定的参考价值。
我有一个用WIX编写的安装程序,它有一个WPF Bootstrapper。最近我们添加了静默安装模式,我们需要使用返回代码来指定静默安装期间发生的错误类型,例如:无效的用户名或密码,不正确的服务器地址,不支持的Windows版本等。
我们使用Bootstrapper类的Engine.Quit()方法退出安装程序并使用退出代码。可以在安装程序日志中看到此退出代码:
[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%设置为自定义值,如果是,可以如何进行?
%ERROPRLEVEL%值是您在批处理文件环境(Windows cmd BAT shell,以及PowerShell,我相信)中获得的一项功能,因此您不会在脚本批处理环境之外看到该值。如果您的静默安装是批处理脚本,则从您的帖子中不清楚。
话虽如此,MSI安装过程会返回此处记录的标准Windows错误结果:
https://docs.microsoft.com/en-us/windows/desktop/Msi/error-codes
所以他们无法定制。您提到的特定错误(例如无效的用户名或无效的服务器地址)似乎是MSI中自定义操作代码的错误。人们通常使用Windows Installer的日志记录功能将消息添加到标准日志文件中,从而处理自定义操作中的错误诊断。这使用MsiProcessMessage()或等效的方法:
因此,除非您安排在日志中记录详细信息(如上所述),或者将它们放在静默安装可以看到它们的位置(注册表?),否则您不会得到特定于自定义操作的错误。
以上是关于带WPF引导程序的WIX Installer未设置%ERRORLEVEL%变量的主要内容,如果未能解决你的问题,请参考以下文章