轻轻关闭应用程序并等待它退出

时间:2016-07-06 01:58:40

标签: c# .net winforms process exit

在应用程序的某处,我创建了一个proc的{​​{3}}类型的实例,如下所示:

 proc = new Process();
 proc.EnableRaisingEvents = true;
 proc.StartInfo.FileName = Settings.Instance.OBSExeFile;
 proc.Exited += (a, b) => doSomething();
 proc.Start();
 proc.WaitForInputIdle();

Process事件中,如果它仍然打开,我想轻轻地关闭它。

我发现没有其他方法可以使用.NET中的本机内容(Close()Kill()CloseMainWindow()似乎都不符合我的需要)所以我不情愿地发送{ {3}}到应用程序并调用Process.WaitForExit(),如下所示:

if (proc != null && !proc.HasExited) {
    if(SendMessage(proc.MainWindowHandle, WM_CLOSE, 0, IntPtr.Zero) == 0)
        proc.WaitForExit();
}

我的问题是:在任何方式混合这种危险的意义上我是否遗漏了什么?例如,WaitForExit()能永远挂起吗?

2 个答案:

答案 0 :(得分:0)

向其发送消息,并将其关闭(以您认为合适的任何方式)。我有一组程序执行此操作,我使用udp广播到127.0.0.1。

答案 1 :(得分:0)

根据您提供的信息,我认为好的方法是创建Windows服务而不是.exe。然后您将完全控制流程。

在Windows服务中,您可以创建一个代码,在stop命令发送给它时“轻轻”关闭当前服务。