Install4J:如何在无人参与模式下更新多个服务后重新启动,而不提示用户输入密码

时间:2014-09-24 19:36:03

标签: install4j

我使用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图标(工作)。

我非常感谢对此有所帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

在我的情况下(两个服务),Update安装程序作为启动它的服务的子进程运行。由于部分更新过程需要停止然后启动两个服务,因此问题是停止调用服务会导致整个更新安装程序被终止。

我的解决方案是让每个服务在Install4J中使用两个Update应用程序来停止/启动另一个服务。

服务#1 - &gt;更新者#1:

  1. 检查新版本
  2. 下载新版本
  3. 安装新版本
  4. 停止服务#2
  5. 启动服务#2(此时,服务#2已完全更新并正在运行)
  6. 通知服务#2执行服务#1的更新
  7. 服务#2 - &gt;更新者#2:

    1. 停止服务#1
    2. 启动服务#1(此时,服务#1已完全更新并正在运行)