我有一个在 Visual Studio 2015 中运行的 C# 应用程序。它接受任意可执行文件并打开一个命令提示符,通过它尝试运行它们。但是,这些可执行文件没有任何保证,因此它们可能无法运行,引发系统错误,例如“无法找到 xxx.dll”。有关特定示例,请参见此处. 这些系统错误(窗口的标题有时会显示“XXXXX.exe - 系统错误”)阻止子进程结束,并且由于父进程正在等待子进程,它也阻止了父进程。它会阻塞,直到有人可以出现并按下按钮,让子进程死亡而父进程继续。我需要在没有人为干预的情况下自动发生这种情况,最好是一开始就不出现这些错误。在网上环顾四周,我能够通过使用 regedit 禁用 Windows 错误报告。虽然这确实忽略了诸如“XXXXX.exe 已停止工作”之类的错误,但它不会忽略诸如我链接的系统错误之类的错误。我怎样才能忽略这种错误?
问问题
168 次
1 回答
0
您链接的错误消息显示 DLL 导入失败,其中函数由 id 而不是其名称加载(当您的程序与预期的 dll 版本不同时,通常会发生这种情况)。我不知道如何阻止此消息首先出现。
但是,由于子可执行文件仍在运行(显示此对话框),您可以找到此窗口并从代码中将其关闭。
这很容易,因为您的父进程必须知道子进程 ID。从那里您可以使用FindWindowEx
或EnumWindows
检索您的对话句柄(通过指定适当的窗口类名称),然后使用CloseWindow
关闭它。
注意:您必须使用 P/Invoke 才能使用这些功能。
也许不是最优雅的解决方案,但绝对有效。
于 2017-03-10T17:40:48.360 回答