我正在使用代码bellow创建几个进程,并且我希望在父级死亡时将它们全部删除。
Process p = new Process();
p.StartInfo.FileName = @"G:\test.exe";
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.StartInfo.UseShellExecute = true;
p.StartInfo.RedirectStandardOutput = false;
p.Start();
1-我搜索了很多,但无法找到解决方案。 唯一有用的解决方案是:
但我在这一行Win32.CloseHandle(m_handle);
2-我正在使用.netframework 3.5,我无法使用任务。
3-我使用了p.WaitForExit();
但我的主要形态已冻结。
有没有办法在不冻结表单的情况下终止父模具上的进程?
答案 0 :(得分:1)
当应用程序结束时,请终止该过程。您可以在主表单应用程序中注册Form.Closing
。
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
Process [] localByName = Process.GetProcessesByName("yoursubprocess");
foreach (var process in processes)
{
process.Kill() ;
}
}
编辑:
yoursubprocess :要杀死的子进程名称。不是主要过程
答案 1 :(得分:1)
从子进程名称看起来您就是他们的作者。然后,您可以使用任何形式的IPC简单地告诉孩子“请,关闭”。而不是杀死过程。
最简单的例子
// in main application
Mutex mutex = new Mutex(true, "MyMutexWithUniqueName");
... do job here
mutex.ReleaseMutex(); // on exit
// in children
Mutex mutex = Mutex.OpenExisting("MyMutexWithUniqueName");
if(mutex.WaitOne(0)) // poll
{
mutex.ReleaseMutex();
... exit process
}
答案 2 :(得分:0)
您可以在列表中存储您的流程。 每次创建一个,将其添加到列表中。然后在主进程关闭时你只需要逐个停止它们。 不是吗?