Windows サービスを作成する方法 (Visual Studio 2008/2005 の Visual C++/CLR を使用)

デル株式会社


以前は、面倒な手順が必要だったWindows サービス プログラムを作成する方法も、
.NET Framework と 対応開発環境の登場によって、かなりスマートに掛けるようになった。

MSDNなどを見れば、すぐに出来ると思うけど、簡単にサービス プログラムをビルド、インストールする手順を覚え書き。


①Widnows サービス プロジェクトを作成する

新規プロジェクト作成のウィザードを開く。

プロジェクトの種類=『Visual C++』の『CLR』を選択し、『Windows サービス』を選択する。

プロジェクト名を入力して、『OK』ボタンをクリックして、プロジェクトを作成する。

②サービスのプロパティを設定する

ソリューションエクスプローラから、作成された XxxxxWinService.h をダブルクリックで開き(デザインビュー)、右クリックから「プロパティ」を選択。

プロパティページから、最低限以下の項目を設定する。

ServiceName - このサービスのサービス名
StartType - 自動/手動/無効など

その他、必要なプロパティを変更する。
デフォルトでは、開始・終了ができる標準的なサービスの設定がされている。

③インストーラを追加する

デザインビューを右クリックして、『インストーラの追加』を選択する。

ProjectInstaller クラスが追加され、デザインビューに ServiceProcessInstaller と ServiceInstaller のインスタンスが追加される。

④インストールの動作を変更する

ServiceInstaller のインスタンス(serviceInstaller1)を選択し、プロパティーページを表示する。

ServiceName が、サービス自体のServiceName(XxxxxWinService.hのプロパティ)と一致している事を確認する。
サービス名を変更した場合は、ここも変更する必要がある。

ServiceProcessInstaller のインスタンス(serviceProcessInstaller1)を選択し、プロパティーページを表示する。

ここで、必要な設定を変更する。

Account - サービスを実行するアカウント

⑤処理内容を記述する

XxxxxWinService.h のコードを表示して、OnStart() と OnStop() を編集して、サービスの開始・終了処理を記述する。

サービスは、一定時間以内に処理をサービスマネージャーに戻す必要があるので、ここでは、スレッドや外部プロセスの起動/終了処理のみを記述すること。

サービスが実際に行う処理は、他のスレッドや外部の実行ファイルに記述する。

ここで例外を発生させたりすると、サービスマネージャーから制御不能と怒られますので、注意が必要。

⑥ビルドする

ビルドして実行ファイルを作成します。

⑦サービスをインストールする

作成したサービスは、自己インストールができるようになっているので、次のコマンドラインでインストールが可能。

Xxxx.exe /Install

⑧サービスを起動する

サービスを起動するには、システムを再起動するか、つぎのコマンドを入力する。

net start "XxxxWinService"

ここで、"XxxxWinService" はサービス名。

Windowsの管理ツールのServiceからも起動・終了ができる。

⑨サービスを停止する

サービスを停止するには、次のコマンドを入力する。

net stop "XxxxWinService"

ここで、"XxxxWinService" はサービス名。

Windowsの管理ツールのサービスからも起動・終了ができる。

⑩サービスをアンインストールする

作成したサービスは、自己アンインストールができるようになっているので、次のコマンドラインでアンインストールが可能。

Xxxx.exe /Install /u

⑪サービスで実行しているプログラムのウインドウを表示できるようにする

サービスは、デフォルトでは、デスクトップとの対話を許可されていない。つまり、デスクトップにウインドウなどを表示する事ができない。(やろうとすると、かなり複雑な手続きが必要になる。)また、サービスが起動した外部プロセスも同じ制約課せられる。このため、次の手順で、マニュアルでデスクトップとの対話をサービスに許可する必要がある。

・管理ツールからサービスを開く
・XxxxWinSerice のプロパティを表示する
・ログオン タブの『デスクトップとの対話をサービスに許可』をチェックする
・『OK』をクリックする
・サービスを再起動する


必要な環境:

CLRによる Windows サービス プログラムの実行・インストール・アンインストールには、.NET Frameworkが必要。



参考URL

MSDN - .NET Framework 開発用 Visual Studio プログラマーズ ガイド - 方法 : Windows サービスを作成する

マイクロソフト サポート オンライン - [SDK32] サービスからアプリケーションデスクトップへのアクセス

@IT総合トップ > 旧@IT会議室 > Insider.NET > C#のWindowsサービスからのProcessによるEXE起動について

マイクロソフト サポート オンライン - CreateProcessAsUser() 関数とウィンドウ ステーションおよびデスクトップ
[PR]
by isoq | 2010-03-31 01:41 | C/C++/Win32
e87.com(千趣会イイハナ) 花を贈るなら日比谷花壇
<< フリーウェア NaiNai(な... 感触があるタッチスクリーン >>