C# Windowsサービスを作る

です。ここ最近、バックグラウンドで実行されるサービスについて調べていたので、 ついでに、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