2019年09月23日更新
Windowsサービスとは?サービスの作成方法や手動で強制削除する方法を解説!
Windowsサービスとは一体何なのかを解説します。Windowsサービスの作成方法、削除方法や注意点、Windowsサービスの仕組みWindowsサービスを一覧で確認する方法、Windowsサービスの作成や設定方法も解説します。
目次
Windowsサービスとは
「Windowsサービス」をご存知でしょうか。以前「NTサービス」等と呼ばれていましたがどちらも同じです。「Windowsサービス」は新しい名称です。または省略をして「サービス」と呼ぶ場合もあります。
Windowsサービスを使うタイミング
「Windowsサービス」はいつ使用するかわからない方もいらっしゃるでしょう。「Windowsサービス」は「バックラウンド」で実行されるプログラムのことです。システム起動と同時に起動が出来ます。Webサーバーなどのサーバーは通常サービスで実装されます。
ログオンをしなくてもプログラムを起動できる注意点
「サービス」にすると誰でも「Windows」にログオンをしなくてもプログラムが起動できます。これが注意点になります。使う人が「Windows」にログインした際ご自分のトークンをプライマリトークンとしてシエルであるエクスプローラのプロセスが起動されます。
トークンはセキュリティレベルを制御をする仕組みです。電卓やメモ帳などの他のプログラムを起動したときはトークンがそれぞれのプロセスに受け継がれるようになります。また、トークンによってはできないこと、できることが制御されます。
Windowsサービスの仕組み
「Windowsサービス」の仕組みはサービスを制御する「サブシステム」の「Service Control Manager」(SCM)と通信するインターフェイスを持ちます。「SCM」との「インターフェイス」を持ちます。サービススナップインや「SCM」と通信が出来るプログラムが「開始」、「停止」等の操作が出来ます。
プログラムが開始をしたらプログラムから「ServiceMain」で「クライアント」からの要求を受け付け、応答を返せれば大丈夫です。
また、「ServiceMain」は「SCM」からの一時停止の要求等を受け付ける「制御ハンドラ」を登録します。「管理画面のサービス」、「スナップイン」等からの「命令」はこちらの制御ハンドラに送られます。これでサービス停止や開始が出来ます。
Windowsサービスを一覧で確認する方法
「Windowsサービス」を一覧で確認する方法は、「サービス管理ツール」のウインドウで調べれます。また、「サービス管理ツール」のウインドウは「コントロールパネル」から開きましょう。Windowsのバージョンによっては「コントロールパネル」の構成に多少の違いがあります。
「検索」を使ってみましょう。「コントロールパネル」から「コントロールパネルの検索」の窓で「サービス」を検索しましょう。
「サービス」が表示されましたら「サービス」を選択しましょう。表示できない場合は「管理ツール」を選択しましょう。「管理ツール」の一覧から「サービス」をダブルクリックすると「サービス管理ツール」のウインドウが表示されます。サービスの一覧が確認できます。
また、「Windows8」以降の場合「タスクマネージャー」を選択して「サービス」のタブを選択すると簡単な一覧が表示されます。タスクを右クリックすると表示される「メニュー」から「サービス管理ツールを開く」で「サービス管理ツール」を開けます。
「サービス管理ツール」のウインドウのサービスで右クリックをしますとサービスの管理メニューが表示されます。また、Windowsサービスの開始や停止したりプロパティを調べることも出来ます。こちらのサービス一覧表示も覚えておきましょう。
「サービス管理ツール」や「タスクマネージャ」を活用する事で現在Windowsサービスとしてプログラムの登録や稼働しているかを把握することも可能です。必要最小限に留めておくことが起動したときの処理も早くなります。注意したいことはWindowsサービスを削除や変更する事によって問題が発生する場合もあります。よく確認しましょう。
サービスのインストール方法
サービスのインストール方法は「Windowsサービス」を実行する手順としてサービスをインストールする必要があります。手順は「デザイン」ビューからバックラウンド領域を選択しましょう。ショートカットのメニューから「インストーラ―の追加」を選択しましょう。
Visual Studio の既定では、2 つのインストーラーを含む「ProjectInstaller」というコンポーネント クラスがプロジェクトに追加されます。
これらのインストーラーはサービス用とサービスの関連プロセス用です「Projectlnstaller」の「デザイン」ビューから「servicelnstaller1」または「ServiceInstaller1」を選択をしてからショットカットメニューの「プロパティ」を選択しましょう。
「プロパティ」のウインドウから ServiceName プロパティが MyNewService に設定されていることを確認しましょう。
サンプル サービスなどのテキストを Description プロパティに追加しましょう。ドロップダウンリストから「StartType プロパティ」を「Automatic」に設定しましょう。
「ProjectInstaller」の「デザイン」ビューから「serviceProcessInstaller1」は「ServiceProcessInstaller1」を選択してから、ショートカット メニューから「プロパティ」を選択します。これで完了です。
Windowsサービスの作成・設定方法
Windowsサービスの作成と設定方法はこちらからになります。「サービスの作成」、「サービス名の変更」、「機能の追加」、「カスタムイベントログ機能の追加」、「開始時の設定」、「停止時の設定」、「サービス保留の設定」、「インストーラーの追加」を解説します。
サービスの作成
サービスの作成方法は「Visual Studio」から「ファイル」のメニューを開きましょう。「新規」から「プロジェクト」を選択しましょう。「新しいプロジェクト」のウインドウを開きましょう。「Windowsサービス」(.NET Framework)のプロジェクトテンプレートに移動して選択しましょう。
見つけ方は「インストール済み」から「Visual C#」または「Visual Basic」を展開をして「Windowdデスクトップ」を選択しましょう。右上の検索ボックスの「Windowsサービス」と入力してエンターキーを押しましょう。
「名前」に「MyNewService」と入力しましょう。OKを選択します。
ここで「デザイン」タブが表示されます。「プロジェクトテンプレート」は System.ServiceProcess.ServiceBase から継承をされます「Service1」という名前の「コンポーネントクラス」が含まれています。サービスを開始するコードなどの多数の基本的なサービス コードを含んでいます。サービスの作成が完了です。
サービス名の変更
作成したサービスの変更方法は、「ソリューションエクスプローラ」から「Service1.cs」または、「Service1.vb」を選択しましょう。ショートカットのメニューから「名前の変更」を選択しましょう。ファイルの名前を「MyNewService.cs」または「MyNewService.vb」に変更をしてエンターを押してください。
コード要素 Service1 に対するすべての参照名を変更するかどうかを確認するポップアップ ウィンドウが表示されます。
ポップアップウインドウで「はい」を選択しましょう。
「デザイン」タブを開きショートカットメニューから「プロパティ」を選択しましょう。「プロパティ」のウインドウで「ServiceName」の値を「MyNewService」に変更しましょう。ファイルメニューから「すべて保存」を選択しましょう。
機能の追加
サービスに機能を追加してみましょう。サービスにカスタムイベントログ機能を追加します。「ソリューションエクスプロ―ラ」から「MyNewService.cs」または「MyNewService.vb」のショートカットメニューから「デザイナーの表示」を選択しましょう。
「ツールボックス」から「コンポーネント」を展開しましょう。「EventLogコンポーネント」を「Service1.cs デザイン」タブまたは「Service1.vb デザイン」タブにドラッグしましょう。
ソリューションエクスプローラーで「MyNewService.cs」、「MyNewService.vb」のショートカットメニューから「コードの表示」を選択しましょう。
カスタムイベントログ機能の追加
カスタムイベントログ機能を追加しましょう。最初にカスタムイベントログを定義しましょう。「C#」の場合既存の「MyNewService()コンストラクター」を編集してください。「Visual Basic」の場合は「New()コンストラクター」を追加してください。
「System.Diagnostics」の名前空間について「MyNewService.cs」には「Usingステートメント」を追加して「MyNewService.vb」は「Imports ステートメント」を追加してください。最後にファイルメニューから「すべて保存」を選択してください。
開始時の設定
サービスの開始時の設定をしましょう。「MyNewService.cs」または「MyNewService.vb」のコードエディターで「Onstartメソッド」を見つけましょう。サービスの開始時にイベントログに対するエントリを記述するコードを追加しましょう。
BackgroundWorker Class
引用サイトも参考になります。ぜひ、見てください。メイン スレッド上で実行する代わりに、バックグラウンド ワーカー スレッドを使用してタスクを実行することもできます。
停止時の設定
停止時の設定をしましょう。サービスの停止時にイベント ログに対するエントリを追加するコード行「OnStop」に挿入しましょう。
サービス保留の設定
サービス保留の設定をしましょう。「System.Runtime.InteropServices」名前空間について「MyNewService.cs」には「using」ステートメントを追加して「MyNewService.vb」には「Imports」ステートメントを追加しましょう。
「MyNewService.cs」または「MyNewService.vb」にコードを追加して「ServiceState」の値を宣言してプラットフォームy帯出しで使用する構造を追加しましょう。「MyNewService」クラスでプラットフォームを呼び出して「SetServiceStatus関数」を宣言しましょう。
「SERVICE_START_PENDING」状態を実装するには、「OnStart メソッド」の先頭に次のコードを追加します「nStart メソッド」の末尾に、状態を「SERVICE_RUNNING」に設定するコードを追加します。
「OnStop」が長時間実行されるメソッドの場合は「OnStopメソッド」でこの手順を繰り返します。「SERVICE_STOP_PENDING」状態を実装し「OnStopメソッド」が終了する前に「SERVICE_STOPPED」状態を返しましょう。
インストーラーの追加
サービスのインストール方法は「Windowsサービス」を実行する手順としてサービスをインストールする必要があります。手順は「デザイン」ビューからバックラウンド領域を選択しましょう。ショートカットのメニューから「インストーラ―の追加」を選択しましょう。
Visual Studio の既定では、2 つのインストーラーを含む「ProjectInstaller」というコンポーネント クラスがプロジェクトに追加されます。
これらのインストーラーはサービス用とサービスの関連プロセス用です「Projectlnstaller」の「デザイン」ビューから「servicelnstaller1」または「ServiceInstaller1」を選択をしてからショットカットメニューの「プロパティ」を選択しましょう。
「プロパティ」のウインドウから ServiceName プロパティが MyNewService に設定されていることを確認しましょう。
サンプル サービスなどのテキストを Description プロパティに追加しましょう。ドロップダウンリストから「StartType プロパティ」を「Automatic」に設定しましょう。
「ProjectInstaller」の「デザイン」ビューから「serviceProcessInstaller1」は「ServiceProcessInstaller1」 を選択してから、ショートカット メニューから「プロパティ」を選択します。これで完了です。
Windowsサービスの実行と削除
こちらではWindowsの実行と削除について解説します。サービスの実行の方法と削除がわからない方はこちらを見てください。
サービスの実行
サービスの実行をしてみましょう。Windowsから「サービス」デスクトップアプリを開きましょう。「Windows+Rキー」を押して「ファイル名を指定して実行」ボックスを開きましょう。
「Services.msc」と入力しましょう。エンターキーかOKを押しましょう。「サービス」内に「サービス一覧」が表示されます。サービスはアルファベット順で表示されます。サービス開始にはサービスのショートカットメニューから「開始」を選択しましょう。
サービスの停止
サービスの停止をしたい場合はサービスのショートカットのメニューから「停止」を選択しましょう。サービスが開始または停止になります。
イベントログ出力の確認
サービスのイベントログ出力の確認をしましょう。Windowsから「イベントビューアー」のデスクトップを起動しましょう。Windowsの検索バーから「イベントビューアー」と入力しましょう。
「イベントビューアー」を選択しましょう。「イベントビューアー」から「アプリケーションとサービスログ」を展開しましょう。「MyNewLog」の一覧を見つけたら展開しましょう。サービスが実行した2つの操作のエントリが表示されます。
サービスの削除
サービスが要らなくなったら削除しましょう。「管理者資格情報」を使用しましょう。「Visual Studio用開発者コマンドプロンプト」を起動しましょう。「開発者コマンドプロンプトfor Visual Studio」のウインドウからプロジェクトの出力を含んだフォルダーに移動してコマンドを入力しましょう。これで削除できます。
Windowsサービスを使ってみよう
Windowsサービスは初めての方はわからないことだらけだと感じる方も多いでしょう。もしわからないことがありましたらこの記事かチュートリアルなども参考になるでしょう。Windowsサービスが使いこなせるようになりましたらもっと便利になります。ぜひ、挑戦してみてください。