Winapi 如何在使用Win32::CreateProcess时吞咽崩溃报告

Winapi 如何在使用Win32::CreateProcess时吞咽崩溃报告,winapi,process,Winapi,Process,在unittest序列中,我正在测试是否捕获到数据损坏错误(故意提供损坏的数据) 为了将程序崩溃(例如,损坏的数据+糟糕的缓冲区管理)视为常规失败情况,我使用CreateProcess在子进程中运行程序。我的问题是,如果它崩溃,我会从Windows获得一个崩溃报告对话框,我必须关闭它才能继续测试序列 是否有任何方法可以使用CreateProcess,以便我可以从Windows吞下崩溃报告?最好的计划可能是在测试机器上关闭Windows错误报告(XP及更早版本上的Microsoft错误报告),至少

在unittest序列中,我正在测试是否捕获到数据损坏错误(故意提供损坏的数据)

为了将程序崩溃(例如,损坏的数据+糟糕的缓冲区管理)视为常规失败情况,我使用CreateProcess在子进程中运行程序。我的问题是,如果它崩溃,我会从Windows获得一个崩溃报告对话框,我必须关闭它才能继续测试序列


是否有任何方法可以使用CreateProcess,以便我可以从Windows吞下崩溃报告?

最好的计划可能是在测试机器上关闭Windows错误报告(XP及更早版本上的Microsoft错误报告),至少在测试期间是这样。具体步骤取决于您的Windows版本,但它在控制面板下。

您不能使用CreateProcess()执行此操作,子程序必须自行处理。两种基本方式:

  • 使用
    \uuuu try/\uuu except
    关键字捕获并处理SEH异常
  • 使用SetUnhandledExceptionFilter()注册回调

在这两种情况下,你都不知道程序在心脏病发作时处于什么状态。最好的做法是将一个命名事件设置为SetEvent(),并让主进程终止该进程。

SetUnhandledExceptionFilter就是我们这样做的方式。这样,它甚至不会进入“windows错误报告”阶段,你可以让它做你喜欢的事情。谢谢你的提示。但是,由于我在问题中没有具体说明,该解决方案必须适用于管理接口有限或没有管理接口的环境。例如,自动化测试服务器。这就是为什么测试序列需要在无人看管的情况下进行。