我需要关闭我用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();
}
}
记事本将关闭。但是,当我使用相同的代码时,我将“notepad”替换为我的应用程序的名称,如下所示:
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()。
答案 0 :(得分:0)
听起来你的应用程序的主窗口没有设置为在主窗口关闭时终止。这相当于右键单击任务栏上的应用程序并选择“关闭”。
可能会尝试调用以下内容,因为它将停止等待退出并另外关闭进程句柄&amp;属性:
p.Close();
另请注意,Process.CloseMainWindow通过向其主窗口发送关闭消息来关闭作为用户界面的进程。正如您在上面的评论中所述,该呼叫返回false。这意味着您的应用程序实际上没有主窗口;因此,您退回时不会对您的申请执行任何操作。
更新: 您可以尝试下面的代码,看看这是否适合您。
// This will send a close message to the main window.
p.CloseMainWindow();
// This will free the associated resources.
p.Close();