【问题标题】:How do I remove tray icon on application uninstall in C#如何在 C# 中删除应用程序卸载时的托盘图标
【发布时间】:2012-05-08 19:28:19
【问题描述】:

我有一个带有托盘图标的应用程序。我正在使用 notifyicon 来完成这项工作。 我在安装和卸载应用程序的 Visual Studio 中创建了它的设置。

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

【问题讨论】:

    标签: c# setup-project uninstallation trayicon


    【解决方案1】:

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

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

    EventWaitHandle ev = new EventWaitHandle(false, EventResetMode.AutoReset, "MyCloseEventName");
    ev.WaitOne();
    

    在您的卸载程序中:

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

    【讨论】:

    • 好的,我得到了关于创建后台线程的部分,但是如何从卸载程序中调用它?因为在卸载程序中我看不到任何地方可以编写任何代码,所以我可以引发这个事件。
    • 但问题是我在卸载程序中在哪里编写这段代码?没有编写代码的选项。检查随附的屏幕截图,您将看到没有 .cs 或其他文件可以编写代码。 i.imgur.com/18yxM.jpg
    • 需要在部署项目中创建Custom Action
    • 在自定义操作中,唯一可用的选项是在安装、提交、回滚和卸载时运行 exe、dll、vbs 或 js 文件。所以我所做的是我创建了另一个在卸载时运行的 .exe,它会杀死该进程(我的应用程序)。但它不会删除保留在那里的托盘图标,只有一个人点击它。有没有办法从另一个应用程序中隐藏一个应用程序的图标?
    • 你不需要杀死进程,这是一种粗略的终止应用程序的方法。只需在另一个 exe 中设置事件。
    猜你喜欢
    • 2023-03-17
    • 2012-02-28
    • 2010-11-10
    • 2017-04-21
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多