c# 关闭进程使用 CloseReason 发送消息

本文关键字:CloseReason 消息 进程 | 更新日期: 2023-09-27 18:31:32

我需要关闭一个定义特定 CloseReason 的进程,这是因为我需要杀死的进程检查表单关闭,如果 CloseReason是 WindowsShutDown 它关闭程序,否则没有:

private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
{
  if (e.CloseReason != CloseReason.WindowsShutDown)
  {
    e.Cancel = true;
    Hide();
  }
}

但是如果我从另一个程序这样做:

List<Process> pp = Process.GetProcessesByName("myProgram").ToList();
foreach (var p in pp)
{
  p.CloseMainWindow();
  p.WaitForExit();
}

但是该程序并未关闭。

我该怎么做?

c# 关闭进程使用 CloseReason 发送消息

我们不能显式设置 Process.Kill 或 CloseMainWindow() 的关闭原因。以下是可用的关闭原因,您可以选择适当的原因

  • ApplicationExitCall 应用程序类的 Exit 方法是调用。
  • FormOwnerClosing 所有者窗体正在关闭。
  • MdiFormClosing 此多文档界面的父窗体(MDI) 表格正在关闭。
  • None 关闭的原因未确定或无法确定确定。
  • TaskManagerClosing Microsoft Windows 任务管理器即将关闭应用程序。
  • UserClosing 用户通过用户界面关闭表单(UI),例如,通过单击窗体窗口上的"关闭"按钮,从窗口的控制菜单中选择"关闭",或按 Alt+F4。
  • WindowsShutDown 操作系统正在关闭所有应用程序
    在关闭之前。