我有一个C#应用程序,它援引不受控C++应用程序通过的过程。开始()

在一些机器,如果这C++应用程序中止,我剩下的只是时间错误的对话表示

有没有办法从C#检测到C++程序有误,只是重新启动它

(我没有来源,因此不能修改C++应用程序)

有帮助吗?

解决方案

在JIT调试器对话框显示,因为C ++程序以某种方式坠毁。虽然对话框打开时,该过程仍然存在(但悬浮),这意味着Process类不会考虑它有“退出”,直到JIT对话解散或一个附加的调试结束处理。

您既可以在机器上遇到问题禁用JIT调试(我的认为的,禁用计算机调试管理器服务可能会禁用JIT调试),可让应用程序崩溃和死亡(因此,报告为“退出”),或(和我不知道你将如何去这样做),看你能不能让你的主机C#应用程序连接本身作为C ++应用程序调试器和从C接收到崩溃的通知++的应用程序,终止它,然后在其上已经结束的信息采取行动。

其他提示

如果C++是控制台的基础,你可以检查两件事情,

  1. 该退出,通常0意味着关闭,否则通常是问题(但是我想这取决于本公约用于发展这种应用程序)

  2. 检查的标准的错误,如果它是空的,所以一切都是好的

    使用(法p=new过程()) {

     p.StartInfo.UseShellExecute = false;
     p.StartInfo.RedirectStandardError = true;
     p.StartInfo.FileName = "any.exe";
     p.Start();
     string error = p.StandardError.ReadToEnd();
     p.WaitForExit()
     if(error.Length == 0 && p.ExitCode == 0)
     {
     }
    }
    
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top