我正在使用System.Diagnostic.Process来调用另一个.exe。我正在创建一个目的是在远程服务器上运行的应用程序。这个.exe有时崩溃,并且有一个消息弹出窗口停止整个过程 - > [应用程序名称]遇到问题并被迫关闭。我正试图找到一种方法让我的c#程序忽略这个弹出窗口并继续执行。
答案 0 :(得分:3)
修复错误,而.exe被称为非选项吗?
答案 1 :(得分:1)
在这种情况下,如果您的进程无法正常工作,您将看到一个Windows默认弹出窗口,但是如果您想知道该进程是否成功运行,那么此代码将适用于您
订阅Process.Exited事件,然后检查Process.ExitCode:
public void StartProcess()
{
p.StartInfo.FileName = BasePath;
p.StartInfo.Arguments = args;
p.Start();
p.Exited += new EventHandler(Process_Exited);
}
void Process_Exited(object sender, EventArgs e)
{
var p = sender as Process;
if (p.ExitCode != 0)
MessageBox.Show(string.Format("Process failed: ExitCode = {0}", p.ExitCode));
}
答案 2 :(得分:0)
恕我直言,运行这样一个错误的exe的最干净的选择是启动它给你的进程调试权限(你可能必须通过P / Invoke显式调用CreateProcess
并带有DEBUG_PROCESS
标志进程创建标志)然后让一个线程处理由WaitForDebugEvent
提供的调试事件;每当你得到一个未处理的最后机会异常时,你可以通知主线程,杀死子进程(从而避免使用默认的Windows异常处理程序)并在必要时重新启动它,在所有其他情况下只需调用ContinueDebugEvent
让它程序正常运行。
请注意,WaitForDebugEvent
提供的“事件结构”指针在C#中可能很难处理。
编辑 :幸运的是,似乎有人为本机调试API创建了一个很好的托管包装器,请参阅here。