2010年4月2日金曜日

.NET Windowsサービス

Windowsサービスは滅多に作らないので、いつも作り方を忘れてしまうのでメモ。

VisualStudio2008の場合
Windowsサービスプロジェクトを作成します。

サンプルコードとして、1分間隔でイベントログを出力するようにします。
自動で作成される「Service1.vb」にコードを書きます。
Public Class Service1

    Private _timer As Timers.Timer

    Protected Overrides Sub OnStart(ByVal args() As String)
        ' サービスを開始するコードをここに追加します。このメソッドによって、
        ' サービスが正しく実行されるようになります
        Me._timer = New Timers.Timer
        Me._timer.Interval = 1000 * 60
        AddHandler Me._timer.Elapsed, AddressOf Timer_Elapsed
        Me._timer.Start()
    End Sub

    Protected Overrides Sub OnStop()
        ' サービスを停止するのに必要な終了処理を実行するコードをここに追加します。
        Me._timer.EndInit()
        Me._timer.Dispose()
    End Sub

    Private Sub Timer_Elapsed(ByVal sender As Object, ByVal e As Timers.ElapsedEventArgs)
        EventLog.WriteEntry("Timer_Elapsed")
    End Sub

End Class

次にインストーラを作成します。
まず、「Service1.vb」のデザイナ上で右クリックし「インストーラの追加」をクリックします。

「ProjectInstaller.vb」が追加されます。
ServiceInstallerコントロールのServiceNameプロパティを変更します。(サービス一覧に表示される名前です)


ソリューションにセットアッププロジェクトを追加します。


ソリューションエクスプローラで追加したセットアッププロジェクトを右クリックし「追加」→「プロジェクト出力」を選択します。


「プロジェクトの出力グループの追加」ダイアログより「プライマリ出力」を選択します。


ソリューションエクスプローラで追加したセットアッププロジェクトを右クリックし「表示」→「カスタム動作」を選択します。


表示されたカスタム動作エディタの「カスタム動作」を右クリックし「カスタム動作の追加」を選択します。


表示される「プロジェクトから項目を選択」ダイアログで「アプリケーションフォルダ」を選択し「OK」をクリックします。

つづいて表示されるダイアログから「WindowsService1(アクティブ)のプライマリ出力」を選択し「OK」をクリックします。


カスタム動作エディタの「インストール」、「確定」、「ロールバック」、「アンインストール」のそれぞれにプライマリ出力が追加されます。


あとはセットアッププロジェクトをビルドしインストールを実行します。
インストールの途中でユーザー名とパスワードを求められるので、
ユーザ名にコンピュータ名¥ログインユーザ名
パスワードにログインパスワードを入力します。

インストールが終了したらサービスを起動します。
Vistaの場合
コントロールパネル→管理ツール→サービスを起動し、サービス一覧に表示される「TestService」を開始します。
コントロールパネル→管理ツール→「イベントビューアを起動し、一分間隔でイベントログが出力されていることを確認します。

0 件のコメント: