如何重现MSI安装错误

时间:2018-01-07 14:00:25

标签: wix windows-installer installer custom-action

有一些方法可以重现/注入一些MSI安装错误吗?
我希望我的安装失败并出现一些错误1xxx / 2xxx ..(msi error codes)哪个错误代码无关紧要,在MSI日志中我会看到“Retun value 3”的重要性。

*我正在使用WIX

2 个答案:

答案 0 :(得分:1)

不是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专家 - 尤其是托管代码)。

已经很久了,但我想我实际上最终登录的是事件日志,而不是在我处理这类事情的那天登录日志文件。它是供企业使用的,事件日志被广泛使用。现在我很担心这一切都很模糊,我没有这方面的示例代码。

离题:立即模式与延迟模式

Digression :请注意,立即模式不会发生回滚(例如,当您点击设置的用户界面时)。在立即模式下,没有要回滚的更改事务,您只是基本结束执行。由于这个原因,不应该使用立即模式自定义操作对系统进行任何更改 - 它们无法回滚(并且它们也不会升级 - 尽管它们可以使用真正的管理权限运行,因此看起来成功地进行了更改,但这总是错误的设计,会让你感到悲伤)。这非常重要,因此提到了这一点。

对于它的价值:它打败了我为什么即时模式自定义操作不会在尝试任何地方写入时崩溃。崩溃的bug不容忽视,我们会更好吗?也许我错过了什么。

答案 1 :(得分:1)

我使用了VBScript延迟自定义操作,除以零。调用对msiexec命令行传入的属性的调用。这将导致回滚并返回错误3.