Windows サービスあれこれ (2)

こんにちは、Platform SDK (Windows SDK) サポートの tomoshi です。
前回の「Windows サービスあれこれ」から、随分間が空いてしまいました・・・皆様、このシリーズ覚えておいででしょうか?

今回は、ちょっと便利な・・・そう、「知っ得★ 」な simple サービス サンプルのカスタマイズ方法がテーマ!
ということで、前回と同様、Windows SDK から提供されている simple サービス サンプルをベースに「あれこれ」ご紹介させていただければと思います。

 

simple サービス サンプルをインストールすると、コントロール パネルの [管理ツール] - [サービス] から ”Simple Service” サービスを選択して、各種プロパティを参照することが可能です。

 

 

このプロパティ ダイアログ上には、[全般]、[ログオン]、[回復]、[依存関係] という 4 つのタブが用意されています。
各タブから、この Windows サービスに対する詳しい設定を参照し、手動で編集することが可能です。

ただし・・・中には、編集できない設定もございます。
たとえば [全般] タブでは、[サービス名] や [表示名] が編集できませんよね。
「SimpleService」というサービス名も「Simple Service」という表示名も、それはそれはシンプルで素敵なのですが・・・たまには変更してみたいと思うこと、ございませんでしょうか。
ご自身で開発中の Windows サービスと同じサービス名・表示名にしてテストしたい・・・と思うこと、ございませんでしょうか。

 

そんな時、この simple サービス サンプルが本領を発揮いたします!

 

simple サービス サンプルには、Windows サービスというプログラムの構成や仕組みが、ギュッとまとまっています・・・と、前回の「あれこれ」でご紹介したのを覚えていらっしゃいますでしょうか。
以下は、simple サービスの service フォルダ直下を参照した dir コマンド結果ですが、Makefile と ReadMe.Txt 以外には、3 つの実装ファイル (.c) と 1 つのヘッダー ファイル (.h) しか含まれていません。

 

 

この中で、simple サービスそのものを実装しているのは、Service.c と Simple.c の 2 つです。
また、Service.c と Simple.c は、いずれも Service.H をインクルードして参照しています。
この Service.H に、先程の [サービス名] と [表示名] を簡単に変更できる「知っ得★ 」が隠されています!

 

 

例えば、サービス名と表示名を、どちらも「MyService」へ変更したい場合・・・このように、SZSERVICENAME と SZSERVICEDISPLAYNAME 定義を変更したら、後は前回の「あれこれ」通り、nmake コマンドでビルド (コンパイルとリンク) をし直して、インストールを実行すれば、一丁あがりでございます。

 

 

コントロール パネルの [管理ツール] - [サービス] から、かつての simple サービス サンプルを探してみましょう。
そこには simple サービスの影も形もなく・・・できたてホヤホヤの MyService サービスが登録されているのを、ご確認いただけます。

 

 

実は、先程編集した SZSERVICENAME と SZSERVICEDISPLAYNAME 定義の値は、Service.c の中で、主に以下の Win32 API を呼び出す際に使用されています。

MSDN ライブラリから、これらの Win32 API を参照してみると・・・
Windows サービスを作成する/サービス制御ハンドラーを登録する等の、Windows サービスのインストールに欠かせない役割を担う API として紹介されています。
simple サービス サンプルでは、これらの API の引数として、先の SZSERVICENAME と SZSERVICEDISPLAYNAME 定義の値を使用していますので、Service.h を編集しただけで、サービス名や表示名を手軽に変更することができるのです。

 

Service.h には、SZSERVICENAME と SZSERVICEDISPLAYNAME 定義以外にも「知っ得★ 」な定義がまだあるのですが・・・
また [全般] 以外の、[ログオン]、[回復]、[依存関係] の各タブで参照できる設定も気になるところではありますが・・・
それは次回以降の「あれこれ」にて、ご紹介させていただきますね♪

師走に入り、晩秋から本格的な冬に向かって寒さが増してきたように思います。
皆様、どうかお風邪などひかれませぬよう、ご自愛くださいませ!