2012-01-03 77 views
1

我正在开发Windows应用程序。我必须从我的应用程序运行一些窗口EXE,我可以做同样的事情,但是当我关闭我的应用程序这些EXE仍然在运行状态,我不知道如何关闭这些EXE。请提出一些提示。关闭进程从应用程序关闭或退出时从Windows应用程序启动

运行过程

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(); 
      } 
     } 
    } 
+3

你怎么关闭应用程序?显示一些代码! – Matthias 2012-01-03 06:50:07

+0

我试图在processinfo类型变量上存储进程信息,然后尝试somevariable.kill(),但没有运气它生成错误“无法处理请求,因为进程已退出”。 – Abhishek 2012-01-03 07:04:10

+0

如果该过程已经退出,那意味着它已经关闭。问题解决了。如果问题*未解决,请使用示例代码和更多信息更新您的问题。 – 2012-01-03 07:05:47

回答

1

试试这个:

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

的原因,一旦你关闭你的应用程序可能是因为你已经从你的应用程序运行的EXE不会终止第二个应用程序作为不同的单独过程运行。

如果您使用System.Diagnostics.Process运行另一个进程,它将保持后台状态,直到手动终止或直到它完成作业。

+0

有没有什么办法可以关闭它。 – Abhishek 2012-01-03 07:00:46

0

尝试此过程proc = Process.GetProcessesByName(“processname”); proc.Kill();

+1

'Kill'​​强行结束进程,这很可能不是你想要的。 'CloseMainWindow'将是一个更好的选择。 – 2012-01-03 06:58:05

+0

其实我试图从我的应用程序运行osk.exe,我试图关闭它,但我无法。有没有办法做到这一点。 – Abhishek 2012-01-03 07:00:31

+0

你打算如何关闭它? – 2012-01-03 07:02:36

1

一些选项:

  • 设置一些通信系统,因此主要应用可以提醒其他应用程序关闭(读了一些WCF信息或远程)
  • 创建do.shutdown文件,并让第二个应用程序检查该文件是否存在,简单但有效。
  • 使用process.Kill选项
  • 使用Sendkey或相当于发送 '退出' 键组合
+0

这不是wcf应用程序,这是简单的winform应用程序。 – Abhishek 2012-01-03 07:06:58

+0

Wcf只是一个可以添加到winform应用程序的库,太糟糕了,您将不得不更改目标应用程序以接收Wcf消息以关闭。我想这个Sendkey或者相当于“最好”的选项。 – CodingBarfield 2012-01-03 07:10:32

+0

谢谢Dude,但我是Windows应用程序开发全新的,我是一个Web开发人员,这就是为什么我面临这些问题。我不知道wcf。 – Abhishek 2012-01-03 07:13:57

1

使用Windows API - P/Invoke的。 FindWindow()EnumWindows()获取窗口句柄。然后您可以发送WM_CLOSEWM_QUIT以通过SendMessage()函数结束应用程序。

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