我使用c#进程类打开一个没有GUI的单独应用程序。这是一个c ++项目,我使用Process.Kill()
来结束它。问题是这并没有给它机会完成它的行动。 Process.Close()
只是在我的主应用程序中释放对象,并使单独的应用程序运行。
什么是使这个过程优雅地关闭的最佳方法?
答案 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
实例,并且您必须处理在应用程序退出之前外部流程已结束的情况。