Windows 10
 Computer >> コンピューター >  >> システム >> Windows 10

NSSMを使ってWindowsサービスを作成・削除する方法

パソコンにログインしているかどうかに関わらず、アプリやスクリプトを常時実行させたい場面は意外と多くあります。例えば、特定のポートを監視するPowerShellスクリプトや、ホームネットワーク上でWebページを公開するWebサーバーなどがその代表例です。

つまり、パソコンの電源が入っている限りプロセス・スクリプト・プログラムを動かし続けたいのであれば、「Windowsサービス」として登録する必要があります。本記事では、無料のオープンソースツール「NSSM」を使って、Windowsサービスを簡単に作成・管理する方法を詳しく解説します。

Windowsサービスの作成に必要なもの

Windows 10でWindowsサービスを作成するには、以下の3点が事前に必要です。

  • 対象コンピューターの管理者権限
  • サービスとして実行するもの(PowerShellスクリプト、プログラムなど)
  • NSSM(Non-Sucking Service Manager)のインストール

NSSM(Non-Sucking Service Manager)とは?

まずはこのユニークな名前について説明しましょう。「Non-Sucking Service Manager(NSSM)」は直訳すると「クソじゃないサービスマネージャー」。名前は少々ふざけていますが、その性能は本物です。

NSSMは、高信頼性かつ柔軟な設定が可能なWindowsサービスを最も簡単に作成できるツールの一つと言えます。しかも無料で、オープンソースソフトウェア(OSS)として公開されています。

NSSMはコマンドプロンプトからもGUI(グラフィカルユーザーインターフェース)からも操作できるため、初心者から上級者まで誰でも扱えます。対応OSはWindows 2000以降のすべてのバージョンで、32ビット版と64ビット版が用意されています。64ビット環境の場合はまず64ビット版を試し、うまく動作しない場合は32ビット版に切り替えるとよいでしょう。

NSSMは以下のいずれかの方法で入手できます。

  • 公式サイトからダウンロード
  • Gitリポジトリからクローン
  • Windows用パッケージマネージャー「Chocolatey」でインストール

入手方法によってインストール手順が異なるため、詳細はNSSMの公式ドキュメントを参照してください。本記事の例では、公式サイトからダウンロードしたファイルをC:\WINDOWS\system32に配置して使用します。

NSSMでWindowsサービスを作成する手順

ここでは例として、「CPU平均負荷率を定期的に記録するPowerShellスクリプト」をWindowsサービス化してみましょう。

ステップ1:スクリプトを保存する

以下のスクリプトをコピーし、log-CPULoadPercentage.ps1という名前で保存します。他の人からアクセスされにくい場所が望ましく、ここではC:/Scriptsフォルダを作成してそこに格納します。あわせて、Scriptsフォルダ内にLogsというサブフォルダも作成しておいてください。スクリプトのパスはC:/Scripts/log-CPULoadPercentage.ps1となります。このパスは後ほど使います。

注意:#記号が付いた行はコメントであり、スクリプトの動作には影響しません。

CLS #任意。テスト時にターミナルをクリアするために使用。

#このスクリプトと同じディレクトリにLogsフォルダがあることを確認すること
#ログは記録の保存先となる
Start-Transcript -Path "$PSScriptRoot\Logs\log-CPULoadPercentage-$(get-date -f yyyy-MM-dd).txt" -Append

#Whileループにより、手動で停止するまで処理が継続される
While ($True){
     #測定日時を示すタイムスタンプを作成
     $timeStamp = get-date -f yyyy-MM-h:mm:ss

     #その時点の平均負荷率を取得し、5秒待機してから再度計測
     $cpuLoadPercent = Get-CimInstance win32_processor | Measure-Object -Property LoadPercentage -Average | Select-Object Average;Start-Sleep -Seconds 5

     #@{Average=13}のような文字列にならないよう平均値のみを抽出
     $cpuLoadPercent = $cpuLoadPercent.Average

     #結果を画面(ここではログファイル)に出力
     Write-Host "$timeStamp CPU Load Percentage $cpuLoadPercent"
}

Stop-Transcript

ステップ2:NSSMサービスインストーラーを起動する

コマンドプロンプトまたはPowerShellを管理者として開き、次のコマンドを実行します。

nssm install logCPUAvg

すると「NSSM service installer」ウィンドウが開きます。

ステップ3:実行ファイルのパスを指定する

Path:欄の横にある「...」ボタンをクリックし、通常C:\Windows\System32\にあるpowershell.exeを選択します。Path:Startup directory:の各欄は自動的に入力されます。

ステップ4:引数を設定する

Arguments:欄に以下を入力します。

-ExecutionPolicy Bypass -NoProfile -File "C:\Scripts\log-CPULoadPercentage.ps1"

最後の部分には、実際のPowerShellスクリプトのパスとファイル名を指定してください。

ステップ5:Detailsタブで表示名などを設定する

Detailsタブを開き、Display name:(表示名)欄にWindowsサービスマネージャー上で表示したい名前を入力します。続いてDescription:(説明)欄に、そのサービスの目的を記入します。

Startup type:(スタートアップの種類)はAutomatic(自動)Automatic (Delayed Start)(自動(遅延開始))Manual(手動)Disabled(無効)から選択できます。今回はAutomaticを選びましょう。

ステップ6:Log onタブで実行アカウントを設定する

Log onタブを開き、This accountラジオボタンを選択して、サービスの実行に使うアカウントとパスワードを入力します。

理想的には、このサービス専用に作成したWindowsアカウントを使用し、その権限はサービスに必要な最小限にとどめるのが安全です。Local System accountも選択できますが、セキュリティ上の理由から推奨されません。

その他のタブでも細かいカスタマイズが可能ですが、今回の演習ではデフォルト値のままで問題ありません。設定が完了したらInstall serviceボタンをクリックします。

ステップ7:インストール完了を確認する

インストールが成功すると「Service "logCPUAvg" installed successfully!」というウィンドウが表示されます。OKをクリックして閉じれば、インストール作業は完了です。

ステップ8:サービスの起動と動作確認

Windowsサービスマネージャー(services.msc)を開き、作成したサービスが一覧に存在することを確認します。次にサービスを右クリックして「開始」を選択し、正常に起動するかテストしましょう。

サービスが実際に動作しているかどうかは、エクスプローラーでログの保存先(C:/Scripts/Logs)を開き、ログファイルが生成されているかを確認すれば分かります。日付付きのテキストファイルが作成されていれば成功です。

NSSMでWindowsサービスを削除する方法

CPU負荷の監視が不要になった場合など、サービスを削除したくなることもあるでしょう。幸い、NSSMを使えば削除も簡単です。

  1. Windowsサービスマネージャーを開き、対象のサービス(Log CPU Average Load)を選択して停止します。ツールバーの四角い停止ボタン、または左側の「サービスの停止」リンクのどちらでも操作できます。
  2. コマンドプロンプトまたはPowerShellを管理者として開きます。
  3. 次のコマンドを入力して実行します。
    nssm remove logCPUAvg
  4. NSSMが削除の確認を求めてくるので、Yesを選択します。
  5. 「Service "logCPUAvg" removed successfully!」というメッセージが表示されたら削除完了です。OKをクリックして閉じましょう。

最後に、サービスマネージャーを開いて該当サービスが一覧から消えていることを確認しておくと安心です。まだ表示されている場合は、画面を更新(F5キー)すれば消えているはずです。

まとめ:サービスとタスクスケジューラの使い分け

Windowsサービスは、常時稼働が必要なアプリやスクリプト、障害発生時に自動再起動させたい処理、現在のユーザーとは異なる権限で実行したいプログラムを運用するのに非常に便利な仕組みです。

一方、これらの要件がすべて不要なのであれば、無理にサービス化せずタスクスケジューラ(Scheduled Task)を使う方がシンプルで管理も容易です。用途に応じて適切な方法を選択しましょう。

  1. Windows 10 リカバリディスクの作成方法と使い方【初心者向け完全ガイド】

    あらゆる情報がデジタル化されている現代では、大切なデータのほとんどがデジタル形式で保存されています。貴重なデータを失うことだけを想像しても、悪夢のようだと感じる方は多いでしょう。マシンに不具合が発生し、失われたデータを復旧しなければならない瞬間は、いつ訪れるかわかりません。しかし、それよりも困ったことがあります。それは、システムが動かなくなったときにOSを再インストールできないことです。 「リカバリディスク」というものをご存じでしょうか?リカバリドライブがあれば、ハードウェアの故障やマシンの不調が発生した場合でも、Windowsを再インストールできます。リカバリディスクを使ってもデータそのも

  2. Windows 10でリカバリーパーティションを作成する方法|O&O DiskImageの使い方

    マルウェア攻撃をはじめとするさまざまなトラブルでオペレーティングシステムが起動しなくなったとき、頼りになるのが「リカバリーパーティション」です。事前にリカバリーパーティションを作成しておけば、システムクラッシュ後もファイルやOSを復元し、中断した作業の続きから日常業務を再開できます。本記事では、バックアップソフト「O&O DiskImage」を使って、Windows 10にリカバリーパーティションを簡単に作成する手順をわかりやすく解説します。 O&O DiskImageのリカバリーパーティション機能とは? O&O DiskImageは、パソコンのハードディスク内にリカバリーパーティションを作