【问题标题】:Suppress an MSI error code抑制 MSI 错误代码
【发布时间】:2024-10-17 11:55:02
【问题描述】:

我收到error 2803: dialog view did not find a record for the dialog。这是因为我已经从我的安装程序中明确删除了FilesInUse 对话框。这是一个对话框,当有文件锁定时,msiexec 有时会要求演示。我的安装程序逻辑没有明确尝试显示此对话框。我的安装程序具有自定义操作来终止锁定文件的进程,因此忽略此消息然后进行安装永远不会出现问题(但是对于此进程终止,我需要权限,因此必须在对话框之后运行延迟自定义操作被要求)。对于我的所有意图和目的,这个对话框基本上是无用的。当此错误代码出现时,我该如何抑制此错误代码,而不是显示致命错误对话框?有谁知道在 WiX 中是否有任何方法可以做到这一点,也许是通过 C# 自定义操作或其他方式?有什么方法可以捕获和处理错误代码?

【问题讨论】:

    标签: c# .net wix custom-action windows-installer


    【解决方案1】:

    我认为您无法抑制该错误,除非您准备使用自己的 UI 并忽略 FilesInUse 对话框请求。或者修改 WiX 代码,如果允许的话。基本上你会收到消息并对它们做出反应(或不做出反应):

    https://msdn.microsoft.com/en-us/library/aa370573(v=vs.85).aspx

    您将返回忽略响应而不是显示对话框。

    您能否使用启动时提升并运行 MSI 的引导程序?在这种情况下,整个安装都会被提升,并且您的 CA 在 InstallFinalize 之前运行时也会被提升,即使它们是即时的。

    如果它们是您的应用程序,那么另一种解决方案是将它们与重新启动管理器集成,以便它们被告知关闭,并具有附加功能,即它们可以保存状态并在必要时恢复状态。你不需要你的 CA。

    【讨论】:

    • 您的回答非常有帮助,我想说声谢谢,因为您阐明了一些伟大的想法,这些想法将使有同样问题的其他人受益。
    • 我最终绕过了它,在 InstallValidate 之前不断提示用户使用 CA,它告诉用户停止托管我的一些安装程序的 Office 添加的 Outlook、Excel、Word 等应用程序-ins。一旦这些都关闭了,我会通知我们的托盘应用程序关闭。由于进程终止,msiexec 不再显示FilesInUse 对话框。顺便说一句,我意识到我实际上并不需要被提升来做这一切。我能够通过Product.wxs 中的RegistrySearch 标签检查注册表项,并以当前用户身份检查和终止活动进程。
    • 如果您有时间让应用自己执行此操作,请查看重新启动管理器 RegisterApplicationRestart () 调用。