#java #windows #jar #installation #startup
#java #Windows #jar #установка #запуск
Вопрос:
Я хочу установить систему мониторинга на компьютер (программа представляет собой файл jar) и запускать ее при запуске каждый раз, когда какой-либо пользователь входит в систему. Однако я не хочу, чтобы пользователь мог завершить ее, поскольку тогда она больше не сможет отслеживаться.
Мы испробовали несколько способов:
- Установка как службы — проблема здесь в том, что наша программа больше не работает; она не может подключиться к компьютеру, который ее контролирует. Для этого мы использовали «Еще одну оболочку службы Java», а также изучили некоторые другие оболочки, которые могли бы помочь нам установить ее как службу.
- Запуск программы при запуске (с использованием папки startup), но не предоставление базовому пользователю привилегий для редактирования / удаления / работы с файлами. Однако, похоже, это замедляет работу всего компьютера? Этого не происходит, когда мы запускаем файл bat, выполняющий jar напрямую. Еще одна проблема заключается в том, что пользователь может просто перейти в диспетчер задач и завершить процесс Java.
- Мы попробовали вариант предыдущего, чтобы решить проблему с завершением процесса, запустив другой процесс. Один будет порождать другой, и эти 2 процесса будут следить друг за другом. Если один завершается, другой обнаруживает его и запускает, чтобы запустить его снова. Хотя у него могут возникнуть проблемы, если пользователь достаточно быстро уничтожает оба процесса, прежде чем любой из них возродится снова, большая проблема заключается в том, что иногда у него возникают проблемы с подключением к другим компьютерам. У нас не было этой проблемы, когда это был всего 1 jar.
Есть ли у кого-нибудь идеи о том, как можно решить эти проблемы?
Контекст здесь windows, но если у вас есть предложения для linux и Mac, это тоже было бы неплохо!
Комментарии:
1. Вы должны выяснить, почему ваш код не будет работать как сервис. Это стандартный способ Windows убедиться, что ваше приложение продолжает работать.
2. Казалось, что у него возникли проблемы с подключением к другим компьютерам через сеть. Порт был открыт, но он ничего не получал. Ограничены ли программы, работающие как службы, в том, что они могут делать?
Ответ №1:
Выход — запустить программу как службу. Вы должны исследовать любые проблемы между вашим приложением и брандмауэром вашей системы. Если у вас активирован брандмауэр Windows, вам следует добавить исключение для java.exe или javaw.exe .
Чтобы предоставить вашей программе повышенные привилегии, вы можете настроить запуск службы от имени другого пользователя. Вы можете сделать это на вкладке «Вход» в свойствах службы.
Комментарии:
1. Спасибо за скриншот и информацию о том, где найти настройки! Мне удалось решить это сейчас… Запуск от имени пользователя с повышенными правами не сработал. Что заставило его работать, так это то, что мне пришлось установить флажок «Разрешить службе взаимодействовать с рабочим столом» при использовании локальной системной учетной записи. Это решило проблему. Большое спасибо за помощь!!
2. Tanuki Software создала достойную программу, которая обрабатывает this.wrapper.tanukisoftware.com/doc/english/download.jsp
Ответ №2:
Вы захотите, чтобы программа запускалась под пользователем с повышенными разрешениями. В WIndows это будет администратор, linux будет использовать root. В Windows, скорее всего, вам нужно будет запустить его как службу. Но я действительно не знаю, почему это может помешать сетевым коммуникациям.
Комментарии:
1. Спасибо за ответ! Мне удалось решить это сейчас… Оказывается, это была не проблема с сетевыми коммуникациями, но полученная информация не могла быть отображена, поэтому я подумал, что это проблема с сетью. Вы были правы насчет разрешений — я снова попытался запустить его как службу Windows. Что заставило его работать, так это то, что мне пришлось установить флажок «Разрешить службе взаимодействовать с рабочим столом». Это решило проблему.