Служба 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 7 64-бит). Что я могу сделать, чтобы попытаться выяснить, почему эта служба не будет работать?

3 ответов


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

после многих часов тестирования и растягивания Tomcat и дублирования его процесса начальной загрузки исправление моей проблемы закончилось тем, что демон Apache Commons (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"

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

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

"/ / IS / / My Service"

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

"//RS / / мой сервис"

все, кажется, работает без каких-либо проблем.


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