当子进程正在运行时如何退出父进程

4

我是一个WinForms应用程序。这里是Form_Load方法的代码。

Process proc = new Process();
proc.StartInfo.FileName = @"C:\program files\MyProgram\start.exe";
proc.StartInfo.Arguments = Application.ExecutablePath;
proc.Start();

Application.Exit();

为什么我的父进程在调用Application.Exit时没有关闭程序?如何检测问题?

2
因为应用程序在Load事件运行时尚未启动。如果创建一个窗体并立即想要终止应用程序,这是毫无意义的。只需不创建该窗体。请编辑Program.cs中的Main()方法。 - Hans Passant
在提供建议之前,我想确切地了解您想要实现什么。您有一个Windows窗体应用程序,在主窗体的加载事件中启动另一个进程?这是父WinForms应用程序的唯一目的吗? - Kerry H
2个回答

3

一旦你启动了一个新进程,它的生命周期就与你当前应用程序无关。如果您想要一个与当前应用程序的生命周期直接相关的执行工件,请使用线程。

如果您确定要创建一个子进程然后终止它,您需要杀死它:

Process proc = new Process();
proc.StartInfo.FileName = @"C:\program files\MyProgram\start.exe";
proc.StartInfo.Arguments = Application.ExecutablePath;
proc.Start();

// When terminating:
proc.Kill();
proc.WaitForExit();
Application.Exit();

然而,对于大多数场景,我不建议使用上述方法,因为如果子进程在执行关键操作(例如保存文件)时被终止,可能会导致数据损坏。


0
为了退出一个 Windows Forms 应用程序,您应该关闭主窗体。查看 Program.Main() 中的代码,您会发现保持主线程活动的是主窗体。关闭它,应用程序就会退出。

你确定 Form_Load 被调用了吗? - Ilya Kogan
是的,Form_load会被调用。而且start.exe和父进程是同一个程序,但我检查了执行路径。 - Neir0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接