Я использую Install4J для установки своего приложения, состоящего из двух служб (двух средств запуска) из одного JAR-файла. Я хочу обновить свое приложение в автоматическом режиме, затем остановить обе службы и запустить обе службы, не запрашивая у пользователя пароль администратора. Обе службы изначально запускаются с правами root, и с помощью команды «ps» я проверил, что они работают с правами root, когда одна из служб вызывает метод ApplicationLauncher.launchApplication Install4J Integration API.
Мой Install4J Updater может загрузить новую версию и остановить вызывающую программу запуска, но проблема, которую я вижу, заключается в том, что я не могу остановить вторую (не вызывающую программу запуска) и не могу запустить вызывающую программу запуска. .
Эта ошибка очень странная, потому что я заметил, что если я остановлю обе службы, а затем запущу обе службы, используя
sudo <ServiceLauncher1> stop
sudo <ServiceLauncher2> stop
sudo <ServiceLauncher1> start
sudo <ServiceLauncher2> start
..все работает. Он загружает обновление, останавливает обе службы, а затем запускает обе службы без проблем. Я заметил (в OSX), что значок запуска для автоматического обновления также отличается (черный значок терминала (не работает) и белый значок Java (работает).
Я был бы очень признателен за помощь в этом. Спасибо!
-Dinstall4j.keepLog=true -Dinstall4j.alternativeLogfile=[path to log file]
для записи файла журнала по определенному пути. Вы можете добавить эти параметры в действие под названием «Установить аргументы установщика» в приложении установщика обновления в вашем проекте. - person Ingo Kegel   schedule 25.09.2014return new String[] {"-q", "-wait", "20", "-dir", installationDirectory, "-Dinstall4j.keepLog=true", "-Dinstall4j.alternativeLogfile=<myhomedirectory>/altinstall.log"};
, но такого журнала не получаю. - person Sydney   schedule 25.09.2014sudo <install_dir>/.install4j/AutoUpdater
, все работает нормально. Почему моя служба (которая работает как root в соответствии сps
) не может делать то же самое, что и я, вызывая программу установки обновлений с моего локального терминала с помощьюsudo
? - person Sydney   schedule 30.09.2014-Dinstall4j.keepLog=true -Dinstall4j.alternativeLogfile=<myhomedirectory>/altinstall.log
к свойству параметров виртуальной машины приложения обновления, чтобы получить файл журнала этого. - person Ingo Kegel   schedule 30.09.2014Shutdown calling launcher
. Ни одно из действий, следующих за этим действием, никогда не выполняется. Поправьте меня, если я ошибаюсь, но я понимаю, что действиеRun executable or batch file
, которое запускается после этого и выполняет${installer:updaterDownloadFile}
, запускает приложениеInstaller
, которое эффективно помещает все файлы в нужные места и перезапускает службы. Это правильно? Если да, то как может запуститься программа установки, если действие завершения работы сначала убивает программу обновления? - person Sydney   schedule 01.10.2014!context.isUnattended()
. Для запуска службы это не нужно, потому что службы останавливаются установщиком. - person Ingo Kegel   schedule 01.10.2014Shut down calling launcher
приводит к запуску приложения Installer, которое затем запускает приложение Uninstaller, которое останавливает службы. Проблема, которую я вижу сейчас, заключается в том, что когда программа удаления выполняетStop a service
для службы, которая первоначально запустила программу обновления, программа удаления останавливается с кодом ошибки 143, который затем останавливает программу установки и, в конечном итоге, останавливается все обновление. Я пытался выполнить это действие в других местах программы установки и обновления, но мне кажется, что я не могу перезапустить службу, вызвавшую программу обновления, или все останавливается. - person Sydney   schedule 02.10.2014