关闭应用程序从应用程序关闭或退出时的Windows应用程序开始

时间:2012-01-03 06:48:03

标签: c# winforms

我正在开发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();
            }
        }
    }

5 个答案:

答案 0 :(得分:1)

一些选项:

  • 设置一些通信系统,以便主应用程序可以提醒其他应用程序关闭(读取一些WCF信息或远程处理)
  • 创建一个do.shutdown文件,让第二个应用程序检查该文件是否存在,简单但有效。
  • 使用process.Kill选项
  • 使用Sendkey或同等产品发送'quit'组合键

答案 1 :(得分:1)

使用Windows API - P / Invoke。 FindWindow()EnumWindows()获取窗口句柄。然后,您可以通过WM_CLOSE功能发送WM_QUITSendMessage()来结束申请。

请注意,如果应用程序在退出时检查用户输入(如MessageBox询问天气,用户确实想要退出),唯一的选择可能是发送WM_DESTROY,这相当于Process.Kill(至少在造成数据丢失方面 - 我不确定它是绝对等价的。)

答案 2 :(得分:1)

试试这个:

Process[] p = Process.GetProcessesByName("osk");
foreach (var item in p)
{
    item.Kill();
}

答案 3 :(得分:0)

关闭应用程序后,您从应用程序运行的EXE未终止的原因可能是因为第二个应用程序作为不同的SEPARATE进程运行。

如果您使用System.Diagnostics.Process运行其他流程,它将保留在后台,直到手动终止或完成它的工作。

答案 4 :(得分:0)

试试这个进程proc = Process.GetProcessesByName(“processname”);       proc.Kill();