C#CloseMainWindow

时间:2017-01-05 21:54:01

标签: c# .net process

我需要关闭我用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()。

1 个答案:

答案 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();