実行可能ファイルを指定して、起動時に起動するWindowsサービスを作成する簡単な方法はありますか?
実行可能ファイルから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サービスを作成できるツールがあります。そのようなツールの例については他の回答を参照してください。
サービスとして.BATまたは任意の.EXEファイルを実行するには、NSSM( 非Sucking Service Manager )を使用します。
nssm.exe install [serviceName]
でサービスをインストールする拡張(Kevin Tong)答え.
ステップ1: ダウンロードして解凍する nssm-2.24.Zip
ステップ2: コマンドラインタイプから:
C:\> nssm.exe install [servicename]
それは下記のようにGUIを開き(例はUT2003サーバです)、そしてそれを単に閲覧するでしょう:yourapplication.exe
の詳細情報: https://nssm.cc/usage
多くの既存の答えはインストール時に人間の介入を含みます。これはエラーが発生しやすいプロセスです。多くの実行可能ファイルをサービスとしてインストールしたい場合は、最後にインストール時に手動で実行する必要があります。
上記のシナリオに向けて、実行可能ファイルをサービスとしてインストールするためのコマンドラインツール、 serman を作成しました。あなたが書く必要があるのは(そして一度だけ書くのが)あなたの実行ファイルと共に簡単なサービス設定ファイルです。実行する
serman install <path_to_config_file>
サービスをインストールします。 stdout
とstderr
はすべてログに記録されます。詳細については、 プロジェクトの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>
これらの追加機能は役に立ちます。 administrator として実行する必要があります。
sc install <service_name> binpath=<binary_path>
sc stop <service_name>
sc queryex <service_name>
sc delete <service_name>
サービス名にスペースが含まれている場合は、 "引用符"で囲みます。
私はそのために良い製品をテストしました: AlwaysUp 。無料ではありませんが、30日間の試用期間がありますので、お試しください。