我有一个非常基本的应用程序,它运行在系统托盘(通知区域)中。 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}}然后流程结束,但图标仍然存在(直到我将鼠标悬停在它上面)。有没有办法删除图标并从单独的流程结束流程?
答案 0 :(得分:0)
向您的应用添加隐藏表单。它将是Application.Run()的参数。当表单关闭时,您的应用将退出。
要在WiX中关闭表单,请使用一个util:CloseApplication 1,并将CloseMessage属性设置为true。
答案 1 :(得分:0)
我决定采取不同的方法。我添加了一个命令行参数来指示我要关闭。然后,此开关将使用SendMessage
定义的自定义消息调用Win32 API PostMessage
(奇怪地RegisterWindowMessage
无效)。然后,WiX安装程序将使用此命令行参数执行进程,现在可以正常关闭。多么严重的痛苦......