Подтвердить что ты не робот

Служба Windows, установленная с Procrun, работает в режиме /TS, но не запускается как служба Windows, говоря, что она "началась, а затем остановилась",

Я установил стандартный исполняемый файл jar в качестве службы Windows, выполнив следующую команду:

> prunsrv.exe //IS//"My Service" --Install="C:\path-to-prunsrv.exe" --Jvm=auto \
  --Startup=auto --StartMode=jvm --Classpath="C:\path-to-MyService.jar" \
  --StartClass=com.mydomain.MyService

Теперь я могу запустить свою программу в консольном режиме, выполнив следующую команду (я использую Java 1.6):

> prunsrv.exe //TS//"My Service"

Когда я пытаюсь запустить службу через стандартный интерфейс служб Windows, я получаю следующее сообщение об ошибке:

Служба MyService на локальном компьютере началась, а затем остановлена. Некоторые службы автоматически останавливаются, если они не используются другими службами или программами.

В моем файле журнала приложений нет вывода, когда я пытаюсь запустить службу таким образом. В журнале событий Windows также нет выхода (Windows 7 64-bit). Что я могу сделать, чтобы попытаться выяснить, почему эта служба не будет работать?

4b9b3361

Ответ 1

Не используйте пробелы в имени службы!

После многих часов тестирования и вытягивания Tomcat и дублирования его процесса начальной загрузки исправление для моей проблемы закончилось тем, что Apache Commons Daemon (Procrun) не работает должным образом, когда есть пустое пространство в имени службы Windows.

Похоже, что он правильно устанавливает и регистрирует службу с Windows, когда в имени службы есть пробелы. Записи реестра Windows даже выглядят правильными. Услуга даже работает в режиме отладки (ака TS или консоли) просто отлично. Однако при запуске в качестве фактического сервиса, запускаемого Windows, он выходит из строя, если служба была установлена ​​с белым пространством в имени службы.

Я уверен, что у Procrun был некоторый тип выхода журнала, когда он терпит неудачу! Хорошее протоколирование может сделать такие отладочные проблемы, как это.

Мне нужно было иметь несколько слов в имени моей службы, поэтому я назвал свою службу одним словом и изменил имя с параметром "DisplayName":

> prunsrv.exe //IS//MyService --Install="C:\path-to-prunsrv.exe" --Jvm=auto \
  --Startup=auto --StartMode=jvm --Classpath="C:\path-to-MyService.jar" \
  --StartClass=com.mydomain.MyService --DisplayName="My Service"

Ответ 2

Я хотел бы дать дополнительную информацию о том, что сказал '11101101b'. (Это мой первый пост, поэтому, пожалуйста, будьте нежны!)

Я смог правильно установить сервис с пробелами в имени службы, изменив часть своей команды //IS//MyService, вместо этого получим следующее: я подозреваю, что это он тоже сделал. (Прошу прощения, если я ошибаюсь.) Обратите внимание, что двойная кавычка открытия начинается в начале строки, а не в начале имени службы.

"//IS//Моя служба"

Как и в случае с ним, сервис был установлен правильно и выглядел корректно, но он не запускался. Я смог обойти это, изменив значение службы данных ImagePath в реестре так же, как и для команды //RS//Моя служба. Следовательно, значение реестра вместо этого имеет следующие значения:

"//RS//Моя служба"

Кажется, что все работает без проблем.

Ответ 3

Этот сервер запускается и останавливается из-за того, что задача завершена службой, поэтому она автоматически останавливается. если у вас есть логика работы внутри, это не остановится.

Ответ 4

У меня та же проблема... на моей локальной машине все нормально работает на сервере та же проблема => проблема была в том, что рабочий путь не был установлен. Пусть кто-то его хрень... будет силой с тобой

enter image description here