C# 如何在C中卸载应用程序时删除托盘图标#

C# 如何在C中卸载应用程序时删除托盘图标#,c#,setup-project,uninstallation,trayicon,C#,Setup Project,Uninstallation,Trayicon,我有一个带托盘图标的应用程序。我正在使用notifyicon来完成这项工作。 我已经在VisualStudio中创建了安装程序,用于安装和卸载应用程序 问题是当我卸载程序时,它的托盘图标并没有被移除,甚至在卸载程序之后,我可以单击图标并启动应用程序,即使卸载程序已删除其后端的.exe文件。通常的方法是在托盘应用程序中创建一个后台线程,该线程将等待通知命名事件。然后,卸载程序应将此事件设置为信号状态。当事件发出信号时,托盘应用程序将退出 在托盘应用程序的后台线程中: EventWaitHandle

我有一个带托盘图标的应用程序。我正在使用notifyicon来完成这项工作。 我已经在VisualStudio中创建了安装程序,用于安装和卸载应用程序


问题是当我卸载程序时,它的托盘图标并没有被移除,甚至在卸载程序之后,我可以单击图标并启动应用程序,即使卸载程序已删除其后端的.exe文件。

通常的方法是在托盘应用程序中创建一个后台线程,该线程将等待通知命名事件。然后,卸载程序应将此事件设置为信号状态。当事件发出信号时,托盘应用程序将退出

在托盘应用程序的后台线程中:

EventWaitHandle ev = new EventWaitHandle(false, EventResetMode.AutoReset, "MyCloseEventName");
ev.WaitOne();
在卸载程序中:

EventWaitHandle ev = EventWaitHandle.OpenExisting("MyCloseEventName");
ev.Set();

好的,我得到了关于创建后台线程的部分,但是如何从卸载程序中调用它呢?因为在卸载程序中,我看不到任何地方可以编写任何代码,所以我可以引发此事件。但问题是,在卸载程序中,我应该在哪里编写此代码?没有编写代码的选项。检查附加的屏幕截图,您将看到没有.cs或其他文件来编写代码。您需要在部署项目中创建。在自定义操作中,唯一可用的选项是在安装、提交、回滚和卸载时运行exe、dll、vbs或js文件。因此,我所做的是创建了另一个.exe,它在卸载时运行,它会终止该进程(我的应用程序)。但它并没有移除仍然存在的托盘图标,只会有人点击它。有没有一种方法可以将一个应用程序的图标从另一个应用程序中隐藏?您不需要终止进程,这是一种终止应用程序的粗略方法。只需在另一个exe中设置事件。