【问题标题】:Java app: Windows Service interacting with the system tray iconJava 应用程序:与系统托盘图标交互的 Windows 服务
【发布时间】:2017-10-24 11:29:40
【问题描述】:

我正在使用 Java Wrapper Service 创建一个 Windows 服务,我想通过系统托盘图标与用户进行交互。

根据库,解决方案是创建“交互式服务”,但 Microsoft Windows 不建议这样做。

https://wrapper.tanukisoftware.com/doc/english/prop-ntservice-interactive.html

https://msdn.microsoft.com/fr-fr/library/windows/desktop/ms683502(v=vs.85).aspx

我的托盘图标将是“GUI 部分”,服务包装器将是“引擎部分”。这两部分之间的最佳沟通方式是什么?

【问题讨论】:

  • 你最终能解决这个问题吗?
  • @hdf 您必须创建一个“后台”应用程序(作为 Windows 服务安装)和一个“前台”应用程序。当您启动 GUI(正面)时,它会启动服务。例如,通过 Web 服务或 JMX 进行前后交换。

标签: java system-tray java-service-wrapper


【解决方案1】:

您可以创建一个作为服务运行并具有系统托盘图标的应用程序。无需将两者分开。

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

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

【讨论】:

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

你的问题可以用 JavaExe 解决

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多