关闭过程从应用程序关闭或退出时的Windows应用程序开始
本文关键字:应用程序 Windows 开始 过程 退出 | 更新日期: 2023-09-27 18:19:28
我正在开发Windows应用程序。 我必须从我的应用程序运行一些窗口 exe,我可以做同样的事情,但是当我关闭我的应用程序时,这些 exe 仍然处于运行状态,我不知道如何关闭这些 exe。请提出一些提示。
运行进程
private void StartChildProcess(string fileName)
{
Process newProcess = new Process();
newProcess.StartInfo = new ProcessStartInfo(fileName); ;
newProcess.Start();
localProcess.Push(newProcess);
}
关闭进程
private void CloseStartedProcesses()
{
while (localProcess.Count > 0)
{
Process process = localProcess.Pop();
if (process != null && !process.HasExited)
{
process.CloseMainWindow();
process.Close();
}
}
}
一些选项:
- 设置一些通信系统,以便主应用程序可以提醒其他应用程序关闭(阅读一些 WCF 信息或远程处理(
- 创建一个 do.shutdown 文件,让第二个应用程序检查该文件是否存在,简单但高效。
- 使用该过程。终止选项
- 使用发送密钥或等效项发送"退出"组合键
Use Windows API - P/Invoke. FindWindow()
或EnumWindows()
以获取窗口句柄。然后,您可以发送WM_CLOSE
或WM_QUIT
以通过SendMessage()
功能结束应用程序。
请注意,如果应用程序在退出时检查用户输入(例如 MessageBox 询问用户是否真的想要退出(,唯一的选择可能是发送等同于 Process.Kill
的WM_DESTROY
(至少在导致数据丢失方面 - 我不确定它是绝对等效的(。
试试这个:
Process[] p = Process.GetProcessesByName("osk");
foreach (var item in p)
{
item.Kill();
}
关闭应用程序后,从应用程序运行的 EXE 不会终止的原因可能是因为第二个应用程序作为不同的独立进程运行。
如果您使用 System.Diagnostics.Process
运行另一个进程,它将保留在后台,直到手动终止或完成其作业。
试试这个 Process proc = Process.GetProcessesByName("processname"(; 过程。杀((;