微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

升级 Java 应用程序时防止重复 Win10 任务栏图标

如何解决升级 Java 应用程序时防止重复 Win10 任务栏图标

使用标准 java.awt.TrayIcon,桌面 Java 应用程序能够在程序启动时创建一个图标,并在程序结束时删除该图标。这可以使用类似于以下的代码来实现:

URL iconUrl = SomeClassInProject.class.getClassLoader().getResource("logo.gif");
ImageIcon imageIcon = new ImageIcon(iconUrl);
Image imageFromIcon = ((ImageIcon)imageIcon).getimage();
TrayIcon trayIcon = new TrayIcon(imageFromIcon,"My Proggy\nrunning",popupDefinedEarlier);
trayIcon.addActionListener(listenerDefinedEarlier);
SystemTray.getSystemTray().add(trayIcon);

以上代码旨在表明显示应用程序图标的技术只是标准方法。当应用程序关闭时,再次使用标准方法

trayIcon.removeActionListener(listenerDefinedEarlier);
SystemTray.getSystemTray().remove(trayIcon);

以上所有内容均按预期运行,但如果应用程序更新,无论是通过 Windows 商店还是手动更新,都会导致应用程序图标重复,如下面的 Windows 10 任务栏图标选择屏幕图像所示:

Windows 10 taskbar icon selection screen showing duplicate icons

在从 Windows 商店升级应用程序期间,应用程序能够执行特定操作。当 Windows 发送带有 WM_ENDSESSIONENDSESSION_CLOSEAPP 时,图标会被移除(这是应用程序关闭时的标准)。此时可以执行其他步骤(在应用程序升级之前最后一次运行),以防止图标重复,但执行此操作的步骤未知。

一个 related SO question,但这个问题不是同一个问题。在那个问题中,问题是当机器从 S3 出来时会出现额外的图标。就我而言,问题仅在应用更新时发生,而不是每次从 S3 出来时发生。

有涉及清除 HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify 数据的“解决方案”,但这需要停止 Explorer 进程并重新启动计算机。这对用户来说太不方便了。

问题:

应该采取哪些步骤来防止在执行升级或更换应用程序时应用程序早期版本的图标仍然存在?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。