繁体   English   中英

如何抑制使用System.Diagnostic.Process执行的exe的对话框?

[英]How do I supress dialogs from an exe that is executed using System.Diagnostic.Process?

我正在使用System.Diagnostic.Process调用另一个.exe。 我正在创建一个旨在在远程服务器上运行的应用程序。 该.exe有时会崩溃,并且弹出消息会停止整个过程-> [应用程序名称]遇到问题并被迫关闭。 我试图找到一种方法使我的C#程序忽略此弹出窗口并继续执行。

是否无法通过调用.exe来修复错误?

在这种情况下,当您的进程无法正常运行时,您会看到一个默认的弹出窗口,但是如果您想知道该进程是否成功运行,那么此代码将为您工作

订阅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));
}

恕我直言,运行这样一个有问题的exe的最干净的选择是启动它,赋予它进程调试权限(您可能必须通过P / Invoke通过在进程创建标志中使用DEBUG_PROCESS标志显式调用CreateProcess ),然后使用线程进程WaitForDebugEvent提供的调试事件; 每当遇到未处理的最后机会异常时,您都可以通知主线程,终止子进程(从而避免使用默认的Windows异常处理程序),并在必要时重新启动它,在所有其他情况下,只需调用ContinueDebugEvent以使程序正常运行即可。

注意,在C#中使用WaitForDebugEvent提供的指向“事件结构”的指针可能很棘手。


编辑 :幸运的是,似乎有人为本地调试API做了一个不错的托管包装,请参见此处

暂无
暂无

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

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