3

数年間、Procrun を使用して Java アプリをサービスに変換してきました (問題なく)。
また、サービスとして実行されているネイティブの Windows 実行可能ファイルもいくつかあります。今までは、Windows Management Instrumentation (WMI) を使用してこれらを定義していましたが、現在、これらのネイティブ exe にも Procrun を使用しようとしています... 残念ながら、サービスを開始できません (または少なくとも維持することができません)。ランニング)。
サービスは正しく作成されているようです。Prunsrvlog/stdout/stderr にはエラーが含まれていません。Apache/procrun と system/Services の両方の下にあるレジストリ キーは正常に作成されているようです。Windows サービス アプレットまたは Prunmgr モニターを使用してサービスを確認できます。しかし...サービスが開始済みとして表示されることはありません。Prunmgr からサービスを手動で開始しようとすると、「... 開始しようとしています」というポップアップが数秒間表示されますが、サービスは停止したままです。
Win Services アプレットから開始しようとすると、さらにポップアップが表示されます。サービスが開始および停止しました。一部のサービスは、使用しないと自動的に停止します」.

解決策のほとんどは自分で見つけました:
ネイティブ テスト プログラムを何らかの形で台無しにしてしまい、常に Windows サービス コントローラーとやり取りしていました...Procrun を使用する場合、ネイティブ プログラムは Windows Service Controllerに登録 (登録解除) しないでください。これは Procrun 自体によって処理されるためです。テスト サービスを修正した後、Procrun サービスを使用して開始および停止できました。

...しかし、いくつかの疑問が残ります。

  1. にスペースを含めてはならないことを示すいくつかのヒットを見つけましたが、ネイティブ実行可能ファイルに Procrun を使用する場合、 にスペースを含めてserviceNameはならないことも (痛々しいほど) 発見しました。にスペースが含まれてdisplayNameいると、Windows サービス アプレットの [プロパティ] ページが開きません。何が原因なのかはわかりませんが、これは Java アプリケーションを使用している場合には当てはまりません。displayName

  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" という 1 行しか含まれてい
ません。 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"

SYSTEM\Services の下:

[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]

考えられることはすべて試しましたが、Service を実行できません:-(
さらに 2 つの注意点: 1. 最初にDisplayName
にスペースがありました。それらをアンダースコアに置き換えるまで、できませんでした。 Windows サービス アプレットの [プロパティ] ページを開くには!!! 2. ネイティブ exe には、Windows サービス コントローラーに登録するためのコードが用意されています(主に、Windows がシャットダウンされているときにクリーンな終了を有効にするため)。実行可能ファイルは " d.exe " (大文字と小文字を区別しません) で終わります 。StartImageに両方の形式 (つまり、TPShmSrvD.exe と TPShmSrv.exe) を使用しようとしましたが、役に立ちませんでした...





ジュール

4

1 に答える 1

1

これは最終的な答えではないかもしれませんが、以下のコマンドを実行してください

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

VIJAY という名前のサービスを作成

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

サービス VIJAY を編集するための UI を起動します。

UI から簡単にパラメータを編集できます

于 2015-12-16T08:50:53.523 に答える