Служба 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 / / мой сервис"
все, кажется, работает без каких-либо проблем.
этот сервер запускается и останавливается из-за того, что задача завершена службой, поэтому она остановится автоматически. если у вас есть логика бегать долго внутри, это не остановится.