我创建了一个需要作为服务运行的Java应用程序。对于服务包装器,我尝试使用tanuki和其他包装软件。 现在,我的应用程序确实作为服务运行 - 但是,它作为SYSTEM下的服务运行,而不是在当前登录的用户下运行。
我的应用程序有一个UI,在应用程序作为服务运行时不显示。我怀疑这是因为服务在SYSTEM下运行而不是在当前登录的用户下。 当我运行应用程序(不将其作为服务安装)时,UI确实显示,我可以看到在当前用户的id下运行的java进程,而在安装为服务时它在SYSTEM下运行。
现在,如果没有UI,我的应用程序就没有了。我需要应用程序在系统启动时作为服务运行,并且UI也需要显示。
有没有人试图做我在这里做的事情,并遇到过类似的问题。如果是这样,你是如何解决它的? 是否有我可以使用的不同包装器服务而没有这个问题。
Tanuki的文档解释了如何将java应用程序设置为服务,但没有谈论带有UI的Java应用程序并在当前登录的用户下运行它。
更新
就这样,这里的人们可以更多地了解我想要实现的目标 - 我尝试使用我的应用程序的行为类似于Dropbox或Yahoo Messenger或任何其他软件从Windows启动开始并继续在后台运行,允许用户使用系统托盘图标与其进行交互。所以基本上所有这些都是用Java / Swing构建的。现在,当它部署应用程序时 - 我可以独立运行它,但运行jar文件或为它创建并运行可执行包装器。但是,我希望软件从Windows启动开始,并继续在后台作为服务运行,同时允许用户进行更改并与之交互,比如从设置的系统托盘图标中调出UI。 截至目前,它确实成功运行。它执行理想情况下应执行的所有操作 - 没有系统托盘图标来显示UI并更改其配置。
更新 - 2
好的..我尝试过高级安装程序,它确实为我包装了一切,为Windows生成了一个exe安装程序。现在我只需要自动启动软件。谁能帮我这个?我没有看到高级安装程序中的选项自动让程序在自动启动时添加自己。
链接到tanuki的文档http://wrapper.tanukisoftware.com/doc/english/faq.html
答案 0 :(得分:1)
罗汉, 请看下面的页面:
http://wrapper.tanukisoftware.com/doc/english/prop-ntservice-interactive.html
您需要将服务标记为交互式,然后以SYSTEM用户身份运行,以便让您的GUI显示在首次登录的桌面上。
问题在于微软改变了从Windows 2008和Vista开始允许的服务。这意味着从这些版本开始,GUI将始终显示在用户需要切换到的沙盒桌面上。
如果要在所有桌面上显示GUI,在所有版本的Windows中,您都需要在桌面中运行JVM。
干杯, 雷夫
答案 1 :(得分:1)
我想对你的问题发表评论,但我没有足够的声誉去做。所以我现在误用了答案功能。
我有类似的问题。我在Windows XP机器上使用了tanuki包装器一段时间,并向所有登录的用户显示了Swing GUI。
现在我迁移到Windows 2008 Server并配置了当前版本的tanuki包装器:
wrapper.ntservice.interactive=true
wrapper.ntservice.hide_console=true
Windows服务在LOCAL SYSTEM帐户下运行。
但GUI仍未显示。你找到了解决问题的方法吗?
答案 2 :(得分:0)
不要认为你应该有一个带有服务的UI。改为把它放在启动组中? UI和应用程序有什么作用?