在应用程序的某处,我创建了一个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()
能永远挂起吗?
答案 0 :(得分:0)
向其发送消息,并将其关闭(以您认为合适的任何方式)。我有一组程序执行此操作,我使用udp广播到127.0.0.1。
答案 1 :(得分:0)
根据您提供的信息,我认为好的方法是创建Windows服务而不是.exe。然后您将完全控制流程。
在Windows服务中,您可以创建一个代码,在stop
命令发送给它时“轻轻”关闭当前服务。