正常关闭系统托盘应用程序

时间:2013-04-16 16:54:44

标签: c# .net winforms

我有一个非常基本的应用程序,它运行在系统托盘(通知区域)中。 Main方法如下所示:

using (NotifyIcon notifyIcon = new NotifyIcon())
{
    notifyIcon.ContextMenuStrip = new ContextMenuStrip();
    notifyIcon.ContextMenuStrip.Items.Add(new ToolStripMenuItem(
        "Exit", 
        null, 
        delegate { App.Exit(); }
        )
    );

    notifyIcon.Icon = Properties.Resources.MyIcon;
    notifyIcon.Visible = true;

    Application.Run();
}

到目前为止这个工作正常(我可以使用上下文菜单中的Exit选项并正确退出应用程序。但是,我需要在卸载软件时退出应用程序。现在我正在使用taskkill从我的WiX安装程序执行此操作(可能有更好的方法吗?)。问题是,如果我执行taskkill /im myapp.exe通知区域中的图标消失但进程仍在运行。如果我强制关闭它{ {1}}然后流程结束,但图标仍然存在(直到我将鼠标悬停在它上面)。有没有办法删除图标并从单独的流程结束流程?

2 个答案:

答案 0 :(得分:0)

向您的应用添加隐藏表单。它将是Application.Run()的参数。当表单关闭时,您的应用将退出。

要在WiX中关闭表单,请使用一个util:CloseApplication 1,并将CloseMessage属性设置为true。

答案 1 :(得分:0)

我决定采取不同的方法。我添加了一个命令行参数来指示我要关闭。然后,此开关将使用SendMessage定义的自定义消息调用Win32 API PostMessage(奇怪地RegisterWindowMessage无效)。然后,WiX安装程序将使用此命令行参数执行进程,现在可以正常关闭。多么严重的痛苦......