2011年02月27日

コンソールアプリでWindowsサービスを作成する

VS2010 Expressを使用してWindowsサービスを作成します。
ここではコンソールアプリケーションでexeを作成し、コマンドプロンプトで
「〇〇〇.exe /i」でサービスのインストール
「〇〇〇.exe /u」でサービスのアンインストール
をするというようなサンプルを作成します。

新規プロジェクトでコンソールアプリケーションを選択。(プロジェクト名「TestService」)
参照設定に「System.Configuration.Install」と「System.ServiceProcess」を追加しておくこと。

クラスファイルを新規作成し、インストーラクラスを作成する。

ProjectInstaller.vb

Option Explicit On
Option Strict On

Imports System.Configuration.Install
Imports System.ServiceProcess

<System.ComponentModel.RunInstaller(True)>
Public Class ProjectInstaller
  Inherits Installer

  Public Sub New()

    Dim srvInstaller As New ServiceInstaller
    Dim proInstaller As New ServiceProcessInstaller

    proInstaller.Account = ServiceAccount.LocalSystem

    srvInstaller.ServiceName = "TestService"
    srvInstaller.Description = "これはテストサービスです"
    srvInstaller.StartType = ServiceStartMode.Automatic

    Installers.Add(srvInstaller)
    Installers.Add(proInstaller)

  End Sub
End Class

すでに存在しているModule.vbを利用して、サービスクラスを作成
Module.vbのファイル名の名前をTestService.vbに変更。

TestService.vb

Option Explicit On
Option Strict On

Imports System.Configuration.Install
Imports System.ServiceProcess
Imports System.Threading
Imports System.IO
Imports System.Text.Encoding

Class TestService
  Inherits ServiceBase

  Private m_thread As Thread
  ''' サービスインストール時のオプション
  Private Const OPTION_INSTALL As String = "/i"
  ''' サービスアンインストール時のオプション
  Private Const OPTION_UNINSTALL As String = "/u"

  Public Shared Sub Main(ByVal args() As String)

    If args.Length = 0 Then
      Return
    End If

    Dim opt As String = args(0)

    Select Case opt
      Case OPTION_INSTALL

        Dim param As String() = _
{Reflection.Assembly.GetExecutingAssembly.Location}
ManagedInstallerClass.InstallHelper(param)

      Case OPTION_UNINSTALL

        Dim param As String() = _
{"/u", Reflection.Assembly.GetExecutingAssembly.Location}
ManagedInstallerClass.InstallHelper(param)

      Case Else
        Return
      End Select
  End Sub

  Private Sub MainProc()
    While True
      Dim sw As StreamWriter = Nothing

      Try
        sw = New StreamWriter("C:\Temp\hoge.txt", True, GetEncoding("Shift_JIS"))

        sw.WriteLine(Now.ToString("yyyy/MM/dd hh:mm:ss"))

      Catch ex As Exception
      Finally
        If Not IsNothing(sw) Then
          sw.Close()
        End If
      End Try

        Thread.Sleep(10000)

    End While
  End Sub

  Protected Overrides Sub OnStart(ByVal args() As String)

    MyBase.OnStart(args)
    m_thread = New Thread(AddressOf MainProc)
    m_thread.Start()

  End Sub

  Protected Overrides Sub OnStop()

    MyBase.OnStop()
    m_thread.Abort()
    ExitCode = 0

  End Sub
End Class

OnStartメソッドはサービス起動時に処理されます。
OnStopメソッドはサービス停止時に処理されます。

ビルド後にコマンドプロンプトで
「TestService.exe /i」
を実行するとサービスがインストールされます。
サービス画面を見てみると「TestService」とい名前のサービスが登録されています。
サービスを起動するとC:\Temp\hoge.txtに10秒ごとにファイル書き込み処理を行うサービスが起動します。

アンインストールする場合、
「TestService.exe /u」
を実行するとサービスがアンインストールされます。
タグ:VB.NET
posted by くさきち at 22:51| Comment(12) | 日記
この記事へのコメント
ブログ旅やってくださいよー(笑)
Posted by 友達できません at 2011年02月28日 13:51
お金と時間されあればいつでもいける準備してるよ(笑)
Posted by くさきち at 2011年03月01日 22:04
女性にいじめられるのが大好きなM男のそこのアナタ、アナタのM度を測れるサイトが誕生しました!!自分のM度はどれくらいなのか?我こそは最強の変態だというアナタの参加をお待ちしております!
Posted by M男 at 2011年08月08日 01:22
今最高にあつい!!今までに味わったことのない最強の体験してみませんか!
Posted by モ バ ゲー at 2011年11月23日 19:48
グリーにハマっている人集まれ!意外と知らないグリーの使い方!?グリーを使って素敵な出会いを探してみませんか?かわいい女の子との出会いを探すなら今はグリーがアツい!
Posted by グリー at 2011年12月22日 03:36
正月休みって最高!!けどそろそろ家に居るのも飽きてきたしなぁ。って人!アグレッシブに活動しようぜ!世間が休んでいる間に差をつけとかないと!上に登れる奴は必ず共通点があるんだ。その答えを見つけたい奴だけおいで。
Posted by モバゲー at 2012年01月03日 08:17
さぁ今年も気合入れて頑張りましょうか!色々辛いこともあるだろう。思い通りにいかなくて挫けそうになる日もあるだろう。だけど何か1つ自分にとってかけがえのないものを作るとまたそんな辛い日々も変わってくるだろう。
Posted by デコログ at 2012年01月17日 18:01
やっぱり気軽に遊べるご近所さんが良い。当サイトはかなり詳細に地区分けをしてるのでほんとにピンポイントであなたのご近所さんを探せます。
Posted by ご近所Mail at 2012年02月06日 18:05
光輝く金色の髪に透き通る肌と潤んだ瞳。美味しそうに光る口唇。どこをとって見ても美人としか表現できない美貌を持っている子です。外専好きには涎もんのサイトになっています。今ならメンバー限定で登録してくれている女の子達の自撮画像公開してるからみんな登録してって。
Posted by CREA at 2012年02月10日 12:03
一度はセレブと言われる暮らしがしたい!セレブの友達・恋人が欲しい!そんな人達集合集合!当サイトは厳しい審査基準をクリアした本物のセレブの方達しか登録できません!なので確実にセレブと知り合いになれるのです!会員の皆様にだけ詳しいプロフを公開中ですので是非無料登録してそのリアルを目の当たりにして下さい。
Posted by Celebrity Life at 2012年02月23日 07:33
こんな可愛い子がこんなサイトに登録してるんだ!ってびっくりした!プロフ写だけじゃなく日記にもちゃんと写メ載せてくれてるから読みやすいし桜じゃないって信用度も上がるし!ってかこのサイトは全部の女の子のプロフ見ても思ったけど本物だね!とにかくプロフィールだけでも見て!びっくりするぐらい可愛いから!直メってところもいいよな!
Posted by みゆう at 2012年03月01日 23:26
メル友掲示板で素敵なメル友探し!ご近所も全国からも簡単に検索して頂けます。メル友募集掲示板をきっかけに、素敵な恋愛をはじめてみませんか?
Posted by メル友掲示板 at 2012年07月18日 17:15
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: