Contents

Windows: サービスを手動で作成 (インストール) する

Contents

<本文>/images/sc-create-windows-service-from-cmd.png

Windows では、通常はユーザーの操作を必要とせずに、バックグラウンドでアプリのバイナリを実行するためにサービスが使用されます。サービスは Windows の起動中に自動的に開始され、システムがシャットダウンするまでバックグラウンドで継続的に実行されます。この投稿では、実行可能バイナリ ファイルから新しいシステム サービスを作成する方法について説明します。

管理者がコマンド プロンプトを介して新しいサービスを作成できる組み込み Windows ツールがいくつかあります。これらには、sc.exe コンソール コマンドと New-Service PowerShell コマンドレットが含まれます。

次のコマンドは、追加の引数を使用して、指定された実行可能ファイルから新しいサービスを作成します。

sc create CorpCollectorService binPath="C:\Program Files (x86)\CORP\collector.exe-i C:\tools\config.xml"start=auto DisplayName="CORP ログ コレクター サービス"

/images/sc-create-windows-service-from-cmd.png.webp

コマンドが正常に実行されると、次のメッセージが表示されます。


SC CreateService SUCCESS

次の引数が使用されます。

  • CorpCollectorService – 新しいサービス名

  • binPath – 実行可能ファイルへの完全なパスと、必要な起動引数 (スペースがある場合は引用符で囲みます) が含まれます。

  • start=auto – Windows 起動時にサービスを自動的に開始します ( boot|system|auto|demand|disabled)。

  • DisplayName — サービスの表示名

追加のパラメータを使用できます。

  • type — サービスのタイプ。デフォルトでは、

自分の

が使用されます。これは、サービスが独自のプロセスで実行されることを意味します。ここで次のように指定することもできます: own|share|kernel|filesys|adapt|rec|interact

  • デフォルトでは、サービスは次の代わりに実行されます。

ローカル システム。特定のユーザー アカウントの代わりにサービスを実行する必要がある場合は、オプションを使用してユーザー名とパスワードを指定します: obj="wshub\user1"password="myUserPassw0r1"

ここで、サービスのグラフィカル サービス管理スナップイン (「services.msc」) を開きます。新しいサービスがサービスのリストに表示されます (「F5」を押して Service Manager データベースを更新します)。ここでサービスを開始または停止したり、スタートアップの種類を変更したりできます。 /images/new-service-appears-in-services-management-console.png.webp

すべてのサービス設定は、HKEY\_LOCAL\_MACHINE\SYSTEM\CurrentControlSet\Services\ レジストリ キーに保存されます。 CorpCollectorService サブキーは、新しいサービス用に自動的に作成されました。

/images/services-settings-are-stored-in-the-registry.png.webp

新しいサービスを作成するための同様の PowerShell コマンドを次に示します。

新しいサービス名 CorpCollectorService-BinaryPathName "C:\Program Files (x86)\CORP\collector.exe-i C:\tools\config.xml"-DisplayName "my test service"-Description "CORP Log Collector Service"-StartupType "Automatic"

/images/new-service-create-service-using-powershell.png.webp

サービスを開始するためにユーザー名とパスワードを構成する必要がある場合は、次の構文を使用します。

` $username=“user123”$password=“PaSSw0rd1”$securepassword=ConvertTo-SecureString $password-AsPlainText-Force

$cred=New-Object System.Management.Automation.PSCredential ($username, $securepassword)

新しいサービス …-認証情報 $cred `

すべての実行可能バイナリが Windows サービスとして正常に動作できるわけではないことに注意してください。アプリケーションは、サービス コントロール マネージャー (SCM) からのコマンドに応答するサービスとして動作するように特別に設計されている必要があります。 SCM 制御信号を処理できないサービスを開始しようとすると、エラー 1053 が表示されます。


Windows could not start the MyService1 service on Local Computer.Error 1053: The service did not respond to the start or control request in a timely fashion.

/images/windows-could-not-start-the-service-on-local-compu.png.webp

いくつかのサードパーティ ツールを使用して、Windows サービス モードで実行するように設計されていないプログラム (グラフィカル インターフェイスを備えたプログラムを含む) からサービスを作成できます。 Windows Server リソース キット 2003 には、任意のバイナリからサービスを作成するために使用できる「srvany.exe」コマンドと「instsrv.exe」コマンドが含まれています。ただし、現在では、最新の NSSM (Non-Sucking Service Manager) ツールを使用することが推奨されています。従来の Microsoft ツールとは異なり、実行中のアプリ プロセスを監視し、高度なプロセス管理機能を提供します。 NSSM は、あらゆるアプリ、スクリプト、または実行可能ファイルを信頼性の高いバックグラウンド Windows サービスとして実行でき、クラッシュした場合には自動的に再起動します。

NSSM は、WinGet パッケージ マネージャーを使用してインストールできます。

winget install--id NSSM.NSSM-e

ここで、任意の実行可能ファイルからサービスを作成するには、次のコマンドを実行します。

nssm インストール テストサービス "C:\Tools\collector.exe"

新しいサービスのプロパティでは、nssm.exe がアプリケーション バイナリの実行可能ランチャーとして機能することに注意してください。

/images/create-a-service-using-nssm.png.webp

NSSM は、サービス パラメータの便利な設定を可能にするシンプルな GUI を提供します。

たとえば、以前に作成したサービスを編集するには、次を実行します。

nssm 編集テストサービス

/images/nssm-service-editor-gui.png.webp

NSSM を使用して PowerShell スクリプトをシステム サービスとして実行する方法を以前に説明しました。

*️⃣ 出典リンク:

WinGet パッケージ マネージャー、PowerShell スクリプトをシステム サービスとして実行します。