繁体   English   中英

如何从Windows的子进程中忽略阻止系统错误

[英]How to ignore blocking system errors from a child process on windows

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

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

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

这很容易,因为您的父进程必须知道子进程的ID。 从那里,您可以使用FindWindowExEnumWindows检索对话框句柄(通过指定适当的窗口类名称),然后使用CloseWindow将其关闭。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM