web-dev-qa-db-ja.com

実行ファイルからWindowsサービスを作成する

実行可能ファイルを指定して、起動時に起動するWindowsサービスを作成する簡単な方法はありますか?

289
German Latorre

実行可能ファイルからWindowsサービスを作成するには、sc.exeを使用できます。

sc.exe create <new_service_name> binPath= "<path_to_the_service_executable>"

実際のexeパスを囲む引用符と、binPath=の後にスペースを入れる必要があります。

scコマンドの詳細については、Microsoft KB 251192 に記載されています。

実行可能ファイルはWindowsサービスである必要があります( つまりServiceMain を実装する)。サービスとして実行できない実行可能ファイルをサービスとして登録すると、サービスを開始しようとすると次のエラーが発生します。

エラー1053:サービスは開始要求または制御要求にタイムリーに応答しませんでした。

任意のサービス以外の実行可能ファイルからWindowsサービスを作成できるツールがあります。そのようなツールの例については他の回答を参照してください。

393
Sergii Pozharov

サービスとして.BATまたは任意の.EXEファイルを実行するには、NSSM( 非Sucking Service Manager )を使用します。

http://nssm.cc/

  • ステップ1 :NSSMをダウンロードする
  • ステップ2 nssm.exe install [serviceName]でサービスをインストールする
  • ステップ3 :これにより、実行可能ファイルを見つけるために使用するGUIが開きます。
201
Kevin Tong

拡張(Kevin Tong)答え.

ステップ1: ダウンロードして解凍する nssm-2.24.Zip

ステップ2: コマンドラインタイプから:

C:\> nssm.exe install [servicename]

それは下記のようにGUIを開き(例はUT2003サーバです)、そしてそれを単に閲覧するでしょう:yourapplication.exe

enter image description here

の詳細情報: https://nssm.cc/usage

83
YumYumYum

多くの既存の答えはインストール時に人間の介入を含みます。これはエラーが発生しやすいプロセスです。多くの実行可能ファイルをサービスとしてインストールしたい場合は、最後にインストール時に手動で実行する必要があります。

上記のシナリオに向けて、実行可能ファイルをサービスとしてインストールするためのコマンドラインツール、 serman を作成しました。あなたが書く必要があるのは(そして一度だけ書くのが)あなたの実行ファイルと共に簡単なサービス設定ファイルです。実行する

serman install <path_to_config_file>

サービスをインストールします。 stdoutstderrはすべてログに記録されます。詳細については、 プロジェクトのWebサイト をご覧ください。

以下に示すように、作業用構成ファイルは非常に単純です。しかし、以下の<env><persistent_env>などの便利な機能もたくさんあります。

<service>
  <id>hello</id>
  <name>hello</name>
  <description>This service runs the hello application</description>

  <executable>node.exe</executable>

  <!-- 
       {{dir}} will be expanded to the containing directory of your 
       config file, which is normally where your executable locates 
   -->
  <arguments>"{{dir}}\hello.js"</arguments>

  <logmode>rotate</logmode>

  <!-- OPTIONAL FEATURE:
       NODE_ENV=production will be an environment variable 
       available to your application, but not visible outside 
       of your application
   -->
  <env name="NODE_ENV" value="production"/>

  <!-- OPTIONAL FEATURE:
       FOO_SERVICE_PORT=8989 will be persisted as an environment
       variable to the system.
   -->
  <persistent_env name="FOO_SERVICE_PORT" value="8989" />
</service>
12
KFL

これらの追加機能は役に立ちます。 administrator として実行する必要があります。

sc install <service_name> binpath=<binary_path>
sc stop    <service_name>
sc queryex <service_name>
sc delete  <service_name>

サービス名にスペースが含まれている場合は、 "引用符"で囲みます。

6
PodTech.io

私はそのために良い製品をテストしました: AlwaysUp 。無料ではありませんが、30日間の試用期間がありますので、お試しください。

3
A. Masson