Apache daemons procrun prunsrv Windows EXE-режим не работает

В течение нескольких лет мы использовали Procrun для превращения приложений Java в службы (и без проблем).
У нас также есть некоторые собственные исполняемые файлы Windows, работающие как службы. До сих пор мы использовали Инструментарий управления Windows (WMI) для их определения, но сейчас я пытаюсь использовать Procrun и для этих встроенных исполняемых файлов... К сожалению, я не могу запустить Службу (или, по крайней мере, остаться таковой) Бег).
Сервис кажется правильно созданным; Prunsrvlog / stdout / stderr не содержит ошибок; ключи реестра, как в Apache / procrun, так и в system/Services, похоже, созданы нормально; Я могу посмотреть на сервис, используя апплет Windows Services или монитор Prunmgr; но... Сервис никогда не показывается как запущенный. Когда я пытаюсь вручную запустить Сервис из Prunmgr, я получаю всплывающее окно "... пытается запустить" в течение нескольких секунд, но Сервис остается остановленным.
Когда я пытаюсь запустить его из апплета Win Services, я также получаю всплывающее окно: служба запускается и останавливается. Некоторые службы останавливаются автоматически, если они не используются ".

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

... но осталось несколько вопросов:

  1. Я нашел несколько хитов, говорящих, что serviceName не должно содержать пробелов, но я также (мучительно) обнаружил, что displayName не должен содержать пробелов при использовании Procrun для собственных исполняемых файлов. Если displayName содержит пробелы, страница "Свойства" в апплете Windows Services отказывается открываться. Я понятия не имею, что может быть причиной этого, и это не относится к использованию приложений Java.

  2. Даже если вы установите службу автозапуска (например, через set PR_STARTUP=auto), "нативный" сервис не запускается, когда вы install это, и это нуждается в явной команде запуска (например, bin\TestService start) (но "родная" служба будет автоматически запускаться при каждой перезагрузке)... это опять-таки не применяется при переносе Java-приложений... они автоматически запускаются при их установке.

И последний совет: при использовании set PR_xxx= формат для определения параметров для службы, значения, содержащие пробелы, обычно не должны заключаться в кавычки... Это может быть само собой разумеется для некоторых более опытных людей, но я от этого немного пострадал:-(

Остальная часть этого длинного поста в основном для истории (или редкого заинтересованного человека)

Код для определения сервиса:

set MY_HOME=c:\program files (x86)\testProgs\
cd /d "%MY_HOME%"
set PR_INSTALL=c:\program files (x86)\testProgs\bin\TestService
set PR_DISPLAYNAME=TestProg_Shared_Memory_Service
set PR_DESCRIPTION=Shared Memory Server for Testing Purposes
set PR_STARTUP=auto
set PR_LOGPATH=c:\program files (x86)\testProgs\logs
set PR_STDOUTPUT=auto
set PR_STDERROR=auto
set PR_STARTMODE=exe
set PR_STARTPATH=c:\program files (x86)\testProgs
set PR_STARTIMAGE=c:\program files (x86)\testProgs\bin\TPShmSrvD.exe
set PR_STARTPARAMS=PORT=9088;PATH=c:\program files (x86)\testProgs
set PR_STOPMODE=exe
set PR_STOPIMAGE=%MY_HOME%bin\TPCommand.exe
set PR_STOPPARAMS=PORT=9088;STOP;SHMSRV
set PR_LOGLEVEL=DEBUG
bin\TestService install

И, как я обнаружил позже, не забудьте добавить:

bin\TestService start

Результаты в commons-daemon.log:

[2012-09-22 15:26:32] [debug] ( prunsrv.c:1644) Commons Daemon procrun log initialized
[2012-09-22 15:26:32] [info]  ( prunsrv.c:1648) Commons Daemon procrun (1.0.10.0 32-bit) started
[2012-09-22 15:26:32] [debug] ( prunsrv.c:559 ) Installing service...
[2012-09-22 15:26:32] [info]  ( prunsrv.c:595 ) Service TestService name TestProg_Shared_Memory_Service
[2012-09-22 15:26:32] [debug] ( prunsrv.c:611 ) Setting service description Shared Memory Server for Testing Purposes
[2012-09-22 15:26:32] [info]  ( prunsrv.c:629 ) Service 'TestService' installed
[2012-09-22 15:26:32] [info]  ( prunsrv.c:1729) Commons Daemon procrun finished
[2012-09-22 15:27:00] [debug] ( prunsrv.c:1644) Commons Daemon procrun log initialized
[2012-09-22 15:27:00] [info]  ( prunsrv.c:1648) Commons Daemon procrun (1.0.10.0 32-bit) started
[2012-09-22 15:27:00] [info]  ( prunsrv.c:1561) Running 'TestService' Service...
[2012-09-22 15:27:00] [debug] ( prunsrv.c:1345) Inside ServiceMain...
[2012-09-22 15:27:00] [info]  ( prunsrv.c:1089) Starting service...
[2012-09-22 15:27:00] [info]  ( prunsrv.c:1244) Service started in 15 ms.
[2012-09-22 15:27:00] [debug] ( prunsrv.c:1496) Waiting for worker to finish...
[2012-09-22 15:27:01] [debug] ( prunsrv.c:1501) Worker finished.
[2012-09-22 15:27:01] [debug] ( prunsrv.c:1524) Waiting for all threads to exit
[2012-09-22 15:27:01] [debug] ( prunsrv.c:1528) JVM destroyed.
[2012-09-22 15:27:01] [info]  ( prunsrv.c:1563) Run service finished.
[2012-09-22 15:27:01] [info]  ( prunsrv.c:1729) Commons Daemon procrun finished

TestService stdout/stderr оба содержат только одну строку с надписью "stdout/stderr initialized"
Ключи реестра в ProcRun:

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\Procrun 2.0\TestService]

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\Procrun 2.0\TestService\Parameters]

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\Procrun 2.0\TestService\Parameters\Log]
"Path"="c:\\program files (x86)\\testProgs\\logs"
"Level"="DEBUG"
"StdError"="auto"
"StdOutput"="auto"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\Procrun 2.0\TestService\Parameters\Start]
"Image"="c:\\program files (x86)\\testProgs\\bin\\TPShmSrvD.exe"
"WorkingPath"="c:\\program files (x86)\\testProgs"
"Params"=hex(7):50,00,4f,00,52,00,54,00,3d,00,39,00,30,00,38,00,38,00,00,00,50,\
  00,41,00,54,00,48,00,3d,00,63,00,3a,00,5c,00,70,00,72,00,6f,00,67,00,72,00,\
  61,00,6d,00,20,00,66,00,69,00,6c,00,65,00,73,00,20,00,28,00,78,00,38,00,36,\
  00,29,00,5c,00,74,00,65,00,73,00,74,00,50,00,72,00,6f,00,67,00,73,00,00,00,\
  00,00
"Mode"="exe"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\Procrun 2.0\TestService\Parameters\Stop]
"Image"="c:\\program files (x86)\\testProgs\\bin\\TPCommand.exe"
"Params"=hex(7):50,00,4f,00,52,00,54,00,3d,00,39,00,30,00,38,00,38,00,00,00,53,\
  00,54,00,4f,00,50,00,00,00,53,00,48,00,4d,00,53,00,52,00,56,00,00,00,00,00
"Mode"="exe"

И под СИСТЕМА \ Услуги:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\TestService]
"Type"=dword:00000010
"Start"=dword:00000002
"ErrorControl"=dword:00000001
"ImagePath"=hex(2):22,00,63,00,3a,00,5c,00,70,00,72,00,6f,00,67,00,72,00,61,00,\
  6d,00,20,00,66,00,69,00,6c,00,65,00,73,00,20,00,28,00,78,00,38,00,36,00,29,\
  00,5c,00,74,00,65,00,73,00,74,00,50,00,72,00,6f,00,67,00,73,00,5c,00,62,00,\
  69,00,6e,00,5c,00,54,00,65,00,73,00,74,00,53,00,65,00,72,00,76,00,69,00,63,\
  00,65,00,22,00,20,00,2f,00,2f,00,52,00,53,00,2f,00,2f,00,54,00,65,00,73,00,\
  74,00,53,00,65,00,72,00,76,00,69,00,63,00,65,00,00,00
"DisplayName"="TestProg_Shared_Memory_Service"
"DependOnService"=hex(7):54,00,63,00,70,00,69,00,70,00,00,00,41,00,66,00,64,00,\
  00,00,00,00
"WOW64"=dword:00000001
"ObjectName"="LocalSystem"
"Description"="Shared Memory Server for Testing Purposes"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\TestService\Parameters]

Я перепробовал почти все, что мог придумать, но не смог запустить Службу:-(
Еще два замечания:
1. У меня изначально были пробелы в DisplayName. Пока я не заменил их подчеркиванием, я не смог открыть страницу свойств в апплете Windows Services!!!

2. Собственный exe-файл имеет код для регистрации в Windows Service Controller (в основном, для обеспечения чистого завершения при завершении работы Windows). Этот код выполняется, если имя исполняемого файла оканчивается на " d.exe " (без учета регистра). Я пытался использовать обе формы (т.е. TPShmSrvD.exe и TPShmSrv.exe) для StartImage, но безрезультатно...

Любая помощь будет оценена,

Юуль

1 ответ

Это может быть не окончательный ответ, но запустить команды ниже

c:\Temp>prunsrv.exe //IS//VIJAY

создать сервис имени VIJAY

c:\temp\prunmgr.exe //ES//VIJAY

запустить пользовательский интерфейс для редактирования сервиса VIJAY

Его легко редактировать параметры из пользовательского интерфейса

Другие вопросы по тегам