Запретить пользователю завершать программу Java?

#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. Что заставило его работать, так это то, что мне пришлось установить флажок «Разрешить службе взаимодействовать с рабочим столом». Это решило проблему.