Java应用程序:与系统托盘图标交互的Windows服务

3
我正在使用Java Wrapper Service创建Windows服务,并希望通过系统托盘图标与用户进行交互。根据库的说明,解决方案是创建一个“交互式服务”,但这不被Microsoft Windows推荐。请参见https://wrapper.tanukisoftware.com/doc/english/prop-ntservice-interactive.htmlhttps://msdn.microsoft.com/fr-fr/library/windows/desktop/ms683502(v=vs.85).aspx。我的托盘图标将是“GUI部分”,而服务包装器将是“引擎部分”。在这两个部分之间进行通信的最佳方法是什么?

你最终解决了这个问题吗? - hdf
@hdf 你需要创建一个“后台”应用程序(安装为Windows服务)和一个“前端”应用程序。当你启动GUI(前端)时,它会启动服务。前端和后台通过Web服务或JMX进行交换。 - psv
2个回答

0

你可以创建一个既能作为服务运行,又能在系统托盘中显示图标的应用程序。不需要分开。

只需创建一个常规的 .jar 文件,并使用包装器服务运行它。然后只需向 .jar 添加 TrayIcon,它就会弹出在系统托盘中。

使用 SystemTray.getSystemTray().add(yourTrayIcon); 将其添加到系统托盘中。您可以连接任何 GUI 并轻松地添加菜单。


这是我所做的;但是Windows禁用了服务的桌面交互,如此处所述:https://msdn.microsoft.com/fr-fr/library/windows/desktop/ms683502(v=vs.85).aspx“通常,服务是设计为在没有图形用户界面(GUI)的情况下无人值守运行的控制台应用程序。” - psv
但我也读到:然而,交互式服务可以显示用户界面并接收用户输入。 - TMS
当然可以,但是我已经尝试过没有成功。我还需要更改注册表键值...但我不能在每个电脑上都这样做。该页面还提到:“在使用交互式服务一节中提到的技术不应在新代码中使用”。 - psv
这篇文章提到了另一种解决方案:“创建一个单独的隐藏GUI应用程序,并使用CreateProcessAsUser函数在交互式用户的上下文中运行该应用程序”,但我正在编写Java代码,我不理解他们的意思。 - psv
好的,我明白,但我还没有完全理解。我有一个交互式服务的解决方案正在生产中运行,没有任何问题(在Windows 8上)。抱歉,我无法提供更多帮助... - TMS

0

您可以使用JavaExe解决您的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接