【发布时间】:2018-02-22 15:06:52
【问题描述】:
我帮助修改了一些软件。我们将应用程序从 32 位 MFC 带到 64 位 MFC。这是一个相当大的项目,但我们遇到了这个非常奇怪的问题。我的安装程序可以在我们这里的所有计算机上运行,该应用程序可以正常工作并且没有问题;但是,当我们的客户尝试安装该程序时,该程序立即崩溃。认为这是一个侥幸的问题,我们要求他们在他们的几台 PC 上安装它,但他们都遇到了这个问题。我们还尝试以给定语言运行我们的 PC,并以给定语言安装操作系统以测试问题,但均无济于事。
我们已经尝试了许多不同的方法,但我认为真正的关键在于事件查看器信息。我们得到路径为 C:\Windows\System32\Kernelbase.dll 和 C:\Windows\System32\ntdll.dll 的模块的异常代码 0x80000003。我无法在我们的系统或开发环境中重复这些错误。有没有人有任何想法,甚至是让错误发生在我们的电脑上,以便我们可以推进一些事情?
如果您还需要更多信息来提供帮助,请告诉我!
编辑注释 1
我还应该提到,我们将 AfxMessageBox 放入程序中,它在 if(!ProcessShellCommand(cmdInfo)) 周围崩溃。我们创建了一个基本的 MFC 项目,其中包含相同的命令并且该程序在目标机器上运行良好。
编辑注释 2
我们的客户使用的系统是 Windows 10 64 位操作系统和 Windows 7 64 位操作系统。
【问题讨论】:
-
可能是您错过了添加到安装中的 DLL?您是否正在使用 Windows 客户版本中不存在的函数或将参数传递给函数?
-
0x80000003 是断点异常。在“输出”窗口中查找可能的调试堆诊断。查看反汇编窗口和堆栈跟踪以确保代码没有被遗忘。
-
我已经检查以确保这些 DLL 在系统上并且它们在那里。我会检查什么可能会调用这两个,因为我不完全确定。感谢您的建议。
-
关于跟踪崩溃的可能方法,获取用户崩溃转储("Dr. Watson" 转储)并使用一些工具对其进行检查。
-
Collecting User-Mode Dumps: "从 Windows Server 2008 和带有 Service Pack 1 (SP1) 的 Windows Vista 开始,可以配置 Windows 错误报告 (WER),以便收集完整的用户模式转储并在用户模式应用程序崩溃后存储在本地。[...] 要启用和配置该功能,请使用以下注册表值..." 无需代码。
标签: c++ mfc runtime-error