应用程序关闭时关闭另一个进程

我有一个C#winform应用程序,在其工作期间打开另一个Winform进程。 另一个进程具有自己的UI。 当我关闭父应用程序时,我希望自动关闭其他应用程序。

我怎样才能做到这一点?

谢谢

如果您正在使用Process.Process ,则有CloseMainWindow方法。 如果您保留对该对象的引用,则可以在以后使用它。

这是MSDN中的相关页面

和相关代码:

 // Close process by sending a close message to its main window. myProcess.CloseMainWindow(); // Free resources associated with process. myProcess.Close(); 

有几种不同的选择。 我建议您让应用程序跟踪它启动的进程:

 private Stack _startedProcesses = new Stack(); private void StartChildProcess(string fileName) { Process newProcess = new Process(); newProcess.StartInfo = new ProcessStartInfo(fileName); ; newProcess.Start(); _startedProcesses.Push(newProcess); } 

当应用程序关闭时,您可以调用一个方法来关闭仍在运行的所有已启动的子进程。 您可以使用Kill方法或通过调用CloseMainWindow和Close方法来使用它。 CloseMainWindow / Close将执行更优雅的关闭(如果您启动记事本并且有未保存的更改,Kill将丢失它们,CloseMainWindow / Close将使记事本询问您是否要保存):

 private void CloseStartedProcesses() { while (_startedProcesses.Count > 0) { Process process = _startedProcesses.Pop(); if (process != null && !process.HasExited) { process.CloseMainWindow(); process.Close(); } } } 

最优雅的方法是将窗口消息发送到另一个进程的主要消息。 您可以使用Process.MainWindow.Handle属性获取此主窗体的句柄(我假设您使用的是Process类,然后使用PostMessage Win API调用将带有自定义ID的消息发送到主窗口这个“子”进程。然后,另一个进程的消息循环可以很容易地检测到这条消息(通过覆盖WndProc方法)并相应地执行正确的关闭。另一种方法是发送标准的WM_CLOSE方法,这意味着你会只需要从Form.Closed事件的处理程序中卸载应用程序,但可能允许您减少控制(在某些情况下是否取消关闭)。