C#正常关闭没有UI的单独应用程序

时间:2016-12-05 12:56:21

标签: c# c++ process

我使用c#进程类打开一个没有GUI的单独应用程序。这是一个c ++项目,我使用Process.Kill()来结束它。问题是这并没有给它机会完成它的行动。 Process.Close()只是在我的主应用程序中释放对象,并使单独的应用程序运行。

什么是使这个过程优雅地关闭的最佳方法?

1 个答案:

答案 0 :(得分:1)

过去我需要从GUI C#工具启动一个非gui C#工具,这两个工具都是我写的。我使用标准输入/输出流在两个工具之间进行通信。

您可以让您的C ++工具在其stdin上侦听指示该工具应该正常退出的命令。然后,在您的C#应用​​程序中,发送退出命令,等待一段合理的时间,如果该工具尚未结束,则将其终止。

我很抱歉我的C ++不够好,不能给你一个C ++方面的例子,但我的C#项目中使用了以下几行来告诉外部进程结束:

m_consoleProcess.StandardInput.WriteLine("QUIT");
m_consoleProcess.WaitForExit(10000);
if (!m_consoleProcess.HasExited)
{
     m_consoleProcess.Kill();
}

如果您需要管理单独的外部流程,当然您需要为每个流程存储一个Process实例,并且您必须处理在应用程序退出之前外部流程已结束的情况。