我使用Install4J来安装我的应用程序,该应用程序由来自单个JAR的两个服务(两个启动程序)组成。我想在无人参与模式下更新我的应用程序,然后停止两个服务并启动这两个服务,而不必要求用户输入管理员的密码。这两个服务最初都是以root身份启动的,我已经使用'ps'命令验证了当其中一个服务调用ApplicationLauncher.launchApplication Install4J Integration API方法时它们以root身份运行。
我的Install4J更新程序能够下载新版本并停止调用启动器,但我看到的问题是我无法停止第二个(非调用启动器)也无法启动呼叫发射器。
这个错误很奇怪,因为我注意到如果我停止这两个服务,然后使用
启动这两个服务sudo <ServiceLauncher1> stop
sudo <ServiceLauncher2> stop
sudo <ServiceLauncher1> start
sudo <ServiceLauncher2> start
..整个事情都有效。它下载更新,停止两个服务,然后启动两个服务就好了。我注意到(在OSX中)自动更新程序的启动器图标也不同(黑色终端图标(不起作用)vs白色java图标(工作)。
我非常感谢对此有所帮助。谢谢!
答案 0 :(得分:1)
在我的情况下(两个服务),Update安装程序作为启动它的服务的子进程运行。由于部分更新过程需要停止然后启动两个服务,因此问题是停止调用服务会导致整个更新安装程序被终止。
我的解决方案是让每个服务在Install4J中使用两个Update应用程序来停止/启动另一个服务。
服务#1 - &gt;更新者#1:
服务#2 - &gt;更新者#2: