如何在Windows上忽略来自子进程的阻塞系统错误

时间:2017-03-10 17:21:55

标签: c# windows child-process ignore system-error

我在Visual Studio 2015中运行了一个C#应用程序。它接受任意可执行文件并打开一个命令提示符,它尝试运行它们。虽然这些可执行文件没有任何保证,但是它们可能无法运行,抛出一个系统错误,上面写着“无法找到xxx.dll”。有关特定示例,请参阅here。这些系统错误(窗口的标题有时表示“XXXXX.exe - 系统错误”)阻止子进程结束,并且由于父进程正在等待子进程,因此它也会阻止父进程。它会阻塞,直到人类出现并按下按钮,让子进程死亡,父进程继续。我需要这种情况在没有人为干预的情况下自动发生,最好只是首先出现这些错误。通过在线查看,我可以通过使用regedit禁用Windows错误报告。虽然这确实忽略了诸如“XXXXX.exe已停止工作”之类的错误,但它不会忽略系统错误,例如我链接的错误。我怎么能忽略这种错误?

1 个答案:

答案 0 :(得分:0)

您链接的错误消息显示DLL导入失败,其中函数由id而不是其名称加载(当您的程序是dll的不同版本时,通常会发生这种情况)。我不知道如何阻止此消息首先出现。

但是,由于子可执行文件仍在运行(显示此对话框),您可以找到此窗口并从代码中关闭它。

这非常简单,因为您的父进程必须知道子进程ID。在那里,您可以使用FindWindowExEnumWindows来检索对话句柄(通过指定相应的窗口类名称),然后使用CloseWindow关闭它。

注意:您必须使用P / Invoke来使用这些功能。

也许不是最优雅的解决方案,但绝对有效。