Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在windows上忽略子进程的阻止系统错误_C#_Windows_Child Process_Ignore_System Error - Fatal编程技术网

C# 如何在windows上忽略子进程的阻止系统错误

C# 如何在windows上忽略子进程的阻止系统错误,c#,windows,child-process,ignore,system-error,C#,Windows,Child Process,Ignore,System Error,我有一个C#应用程序在Visual Studio 2015中运行。它接受任意可执行文件,并打开一个命令提示符,试图通过该提示符运行这些文件。但是这些可执行文件没有任何保证,因此它们可能无法运行,引发系统错误,比如“找不到xxx.dll”。有关特定示例,请参见。这些系统错误(窗口的标题有时会显示“XXXXX.exe-系统错误”)会阻止子进程结束,并且由于父进程正在等待子进程,因此也会阻止父进程。它会阻塞,直到有人出现并按下按钮,让子进程死亡,父进程继续。我需要在没有人为干预的情况下自动发生,最好是

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

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

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

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

注意:您必须使用p/Invoke来使用这些函数

也许不是最优雅的解决方案,但肯定有效