【发布时间】:2017-01-05 21:54:00
【问题描述】:
我需要关闭另一个使用 C# 以编程方式编写的应用程序。我按照示例here 操作,它与记事本一起使用。但它不适用于我编写的 WinForms 应用程序。
例如,当我打开一个记事本实例时,然后执行以下代码:
Process[] procs = Process.GetProcessesByName("notepad");
if (procs.Length > 0)
{
for (int i = 0; i < procs.Length; i++)
{
Process p = procs[i];
p.CloseMainWindow();
}
}
记事本将关闭。但是,当我使用相同的代码时,我将“记事本”替换为我的应用程序的名称,如下所示:
Process[] procs = Process.GetProcessesByName("MyTestApp");
if (procs.Length > 0)
{
for (int i = 0; i < procs.Length; i++)
{
Process p = procs[i];
p.CloseMainWindow();
}
}
我的应用程序没有关闭。
为了响应来自其他应用的 CloseMainWindow() 调用,我必须在目标应用中执行什么操作吗?我想做一个优雅的关机,如果可以避免的话,我不想使用 Process.Kill()。
【问题讨论】:
-
你调试了吗?是否有任何进程返回?
-
是的。当我在 for 循环中放置一个断点时,p 被设置为正确的进程(由进程 ID 匹配),但 CloseMainWindow() 调用返回 false。
-
你为什么不试试 Process.Kill() 呢? msdn.microsoft.com/en-us/library/…