C# Windowsサービスを作る

chakemiです。ここ最近、バックグラウンドで実行されるサービスについて調べていたので、 ついでに、C#でWindowsサービスを作ってみました。

開発環境

  • VisualStudio2010
  • WindowsXP SP3 Net Framework4

VisualStudioのウィザードからテンプレートを選択します。

Service1.csのデザイナ上で右クリックをし、「インストーラーの追加」を選択します。

すると、ProjectInstaller.csのデザイナが表示され、 serviceProcessInstaller1とserviceInstaller1のコンポーネントが追加されます。

次に、プロパティウィンドウでこれらのコンポーネントの設定をします。

serviceInstaller1

Name そのまんまですね。
DelayedAutoStart 他の自動的に開始されるサービスが実行されるまでサービスの開始を遅延するかどうかを示す値 サービスが自動開始でない限り無視される
Description サービスの説明
DisplayName 一覧での表示名
Parent インストーラーが属しているコレクションを格納しているインストーラー。
ServiceName システムが使用する名前 Service1.csのプロパティServiceNameとあわせます。
StartType サービスを開始する方法

リファレンスのまんまですね。。。

serviceProcessInstaller1

Account サービス アプリケーションを実行するときに使用するアカウントの種類

とりあえず、適当にサービスの説明と一覧での表示名を記述して、あとは、デフォルトのままで、AccountはUserにしときます。

あとは、Service1.csの中に、OnStartメソッドとOnStopメソッドがあるので、起動と停止の際のイベントに対応した処理を書きますが ここまでしといて、これといったサービスを考えていなかったので、とりあえず何もしないサービスをビルドしてみます。

すると、プロジェクトのbinフォルダにexeファイルが生成されるのでとりあえず、インストールしてみます。 インストールには、.NET FrameworkのユーティリティのInstallUtilを使います。

スタートメニューからVisualStudioコマンドプロンプトを起動して、

1
installutil "C:\~\bin\Debug\TestService.exe"

と実行します。 すると、「サービス ログインの設定」というポップアップダイアログが表示されます。

AccountはUserを指定しておいたので、ログインユーザーとパスワードを指定したいとこですが、 ここで一点注意で、ユーザー名は「コンピュータ名¥ユーザー名」の形で入力します。

無事、インストールが完了すれば、以下のように出力されます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Microsoft(R) .NET Framework Installation utility Version 4.0.30319.1
Copyright (c) Microsoft Corporation.  All rights reserved.

トランザクションのインストールを実行中です。

インストール段階を開始しています。


~省略~


サービス 'Service1' をインストールしています...
サービス 'Service1' は正常にインストールされました。
EventLog ソース Service1 をログ Application に作成しています...

インストール段階が正常に完了しました。コミット段階を開始しています。


~省略~


コミット段階が正常に終了しました。

コンピュータの管理から見てみると、ちゃんと登録出来てます。

実際に、起動してみます。

ちゃんと起動出来ます。何も実行されませんが。。。 最後に、アンインストールしときます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
installutil "C:\~\bin\Debug\TestService.exe" /u


Microsoft(R) .NET Framework Installation utility Version 4.0.30319.1
Copyright (c) Microsoft Corporation.  All rights reserved.



アンインストールを開始します。


~省略~


EventLog ソース Service1 を削除しています。
サービス Service1 をシステムから削除しています...
サービス 'Service1' は正常にシステムから削除されました。

アンインストールか完了しました。

最後の日本語がおかしいですが、無事アンインストール完了です。 次回までに、実際に動かすサービスを考えておこうと思います。

Comments