【问题标题】:C# CloseMainWindowC# 关闭主窗口
【发布时间】: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()。

【问题讨论】:

标签: c# .net process


【解决方案1】:

听起来您的应用程序的主窗口未设置为在主窗口关闭时终止。这相当于右键单击任务栏上的应用程序并选择“关闭”。

可能尝试调用以下命令,因为它将停止等待退出并另外关闭进程句柄和属性:

p.Close();

另外请注意,Process.CloseMainWindow 通过将关闭消息发送到其主窗口来关闭作为用户界面的进程。正如您在上面的评论中所说,调用返回错误。这意味着您的应用程序实际上没有主窗口;因此,您会在没有对您的应用程序执行任何操作的情况下返回。

更新: 你可以试试下面的代码,看看这是否适合你。

// This will send a close message to the main window.
p.CloseMainWindow();

// This will free the associated resources. 
p.Close();

【讨论】:

  • "听起来您的应用程序的主窗口没有设置为在主窗口关闭时终止。" --我该怎么做?
  • 请查看我的最新编辑/更新,看看这是否对您有帮助。
猜你喜欢
  • 1970-01-01
  • 2023-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多