【发布时间】:2018-01-07 14:00:25
【问题描述】:
有什么方法可以重现/注入一些 MSI 安装错误?
我希望我的安装失败并出现一些错误 1xxx/2xxx.. (msi error codes) 哪个错误代码无关紧要,重要的是在 MSI 日志中我会看到“Retun value 3”。
* 我正在使用 WIX
【问题讨论】:
标签: wix windows-installer installation custom-action
有什么方法可以重现/注入一些 MSI 安装错误?
我希望我的安装失败并出现一些错误 1xxx/2xxx.. (msi error codes) 哪个错误代码无关紧要,重要的是在 MSI 日志中我会看到“Retun value 3”。
* 我正在使用 WIX
【问题讨论】:
标签: wix windows-installer installation custom-action
不是 100% 确定您需要什么。您是否正在测试 Windows Installer 回滚 并希望从您的自定义操作中触发它?或者您只是想在 MSI 日志文件中写入一些内容而不触发回滚?我想你可能想要两者,但听起来你可能只想写日志。
您基本上可以通过从自定义操作返回错误代码并将自定义操作设置为 “检查退出代码” 来触发 MSI 中的回滚。有关延迟与立即模式自定义操作的说明,请参见下文。
另外:仅在您需要并且可以处理时检查退出代码,否则您的设置可能会意外失败 - 通常是因为一些微不足道和晦涩难懂的错误(这可能会破坏您的主要升级 - 或更糟糕的是 - 例如完全卸载。有几种意外情况。始终测试所有安装模式,包括升级)。
WiX util 扩展中还有一项功能可让您触发延迟故障:WixFailWhenDeferred。老实说,我从未尝试过。 List of standardized WiX custom actions(请参阅其中的“使用标准自定义操作”链接)。 See Bob Arnson's blog on this.
这里有一个链接,对于初学者来说,如何实际写入日志文件本身:Writing to the Log File from a Custom Action。这来自 Flexera(Installshield 的制造商),但它涵盖了来自不同类型的自定义操作的日志记录以及它们的专有方式。我不知道你使用什么类型的操作。它由 Robert Dickau(前 Installshield / Flexera 高级技术培训师)编写,尽管主题很高级,但他仍具有使事情尽可能简单的出色能力。这是一个快速阅读。
可能有更好的方法可以从我没有使用过的托管代码中做到这一点。让我们拭目以待,看看 Chris Painter 是否会在此处提供一些信息(WiX/MSI 专家 - 特别是关于托管代码)。
已经很久了,但我想我实际上是在处理此类事情的那一天登录到事件日志而不是日志文件。它是供企业使用的,事件日志被广泛使用。恐怕现在一切都变得模糊了,而且我没有可用的示例代码。
题外话:请注意,在立即模式下不会发生回滚(例如,当您点击设置的用户界面时)。在即时模式下,没有要回滚的更改事务,您基本上只是结束执行。出于这个原因,不应该使用即时模式自定义操作对系统进行任何更改——它们不能回滚(它们也不会以提升的方式运行——尽管它们可以使用真正的管理员权限运行,因此看似成功地进行了更改,但这总是错误的设计,会让你伤心)。这是非常重要的,因此在此提及。
对于它的价值:为什么即时模式自定义操作不会在尝试在任何地方写入时崩溃,这让我感到震惊。崩溃错误不容忽视,我们会更好吗?也许我错过了什么。
【讨论】:
我使用了除以零的 VBScript 延迟自定义操作。对在 msiexec 命令行中传入的属性进行调用。这将导致回滚并返回错误 3。
【讨论】: