【发布时间】:2014-07-17 15:39:47
【问题描述】:
我有一个 C++ Wix 自定义操作,用于浏览本地计算机上的文件。当我在 Windows Server 2003 和 Windows 7(我的机器)上运行安装程序时,它按预期工作。但是,当我在 Windows Server 2008 上运行安装程序时,自定义操作失败。
我已成功设置 MsiBreak 环境变量,并且能够使用远程调试附加我的调试器。当我这样做时,自定义操作按预期工作。如果我在没有附加调试器的情况下重试,自定义操作线程会崩溃而不显示文件打开对话框(下面的崩溃详细信息)。我尝试了使用公共文件对话框和公共项目对话框的自定义操作,并且两者的结果相同。
我所有其他自定义操作都可以完美运行。有人对我应该如何进行有任何想法吗?
谢谢!
Problem signature:
Problem Event Name: APPCRASH
Application Name: MsiExec.exe
Application Version: 5.0.7601.17514
Application Timestamp: 4ce792c4
Fault Module Name: KERNELBASE.dll
Fault Module Version: 6.1.7601.18409
Fault Module Timestamp: 53159a86
Exception Code: 80000003
Exception Offset: 00013226
OS Version: 6.1.7601.2.1.0.272.7
Locale ID: 1033
Additional Information 1: 0a9e
Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
Additional Information 3: 0a9e
Additional Information 4: 0a9e372d3b4ad19135b953a78882e789
【问题讨论】:
-
您应该说一下“自定义操作失败”的实际含义。是崩溃吗?无法显示对话框?
-
80000003 是stackoverflow。
-
我真正的意思是它在你的代码中失败的地方。我问是因为这可能是线程问题。如果您的代码不是 STA,那么与窗口和消息相关的任何事情都可能失败,当然它可以在调试模式下工作,因为 Windows 知道您可能需要 UI 并会为您提供 STA。此外,这些东西依赖于操作系统,并且在执行序列中不可靠,因为它是 MTA。例如,如果崩溃与 UI 窗口的消息有关,那么您可能会在非 STA 环境中遇到问题。但是,您没有说明您的 CA 是从哪里调用的、是否延迟了,或者您的代码在崩溃时正在做什么。
-
对不起PhilDW。我完全错过了你评论的主题。 :) 我正在努力的自定义操作是 UI 序列中的即时自定义操作。具体来说,我有一个带有 PushButton 的对话框。 PushButton 有一个调用类型 1 自定义操作的 DoAction ControlEvent。有没有一种简单的方法来检测我的代码中自定义操作在没有调试器的情况下失败的位置?还是我必须记录很多消息?
-
另外,我的自定义操作是一个同步的自定义操作,它会检查返回码的值。
标签: debugging windows-installer custom-action