sc create webimagemailer binpath= C:\wc\wcmail.exe start= auto displayname= "Web cam image mailer" obj= .\webcamguy password= swordfish error= ignore
今回はこれをより掘り下げていくことにする。WebimagemailerはWindows Image Acquisition(WIA)サービス(キー名stisvc)が実行されていなければ実行できないものと仮定する。サービス関連の用語で言えば,Webimagemailerはstisvcに依存しているということである。
Webimagemailerにstisvcの起動後に起動するように指示するには,「depend= stisvc」パラメータを追加する(くどいようだが,等号とパラメータ値の間には空白が必要である)。サービスが一つ以上のサービスに依存していることを指定するには,サービスのキー名をスラッシュで区切って指定する。
例えば,Webimagemailerサービスを作成し,stisvcおよびwebclientをその起動前に起動しておくよう指定するには,次のように入力する。
sc create webimagemailer binpath= C:\wc\wcmail.exe start= auto displayname= "Web cam image mailer" obj= .\webcamguy password= swordfish error= ignore depend= stisvc/webclient
依存性が問題になる場合は,SCの三つのサブコマンド,enumdepend,qc,configを依存性の問い合わせに使用できる。指定したサービスに依存しているサービスを特定するには,次のように入力する。
sc enumdepend <サービスのキー名>
例えば,サーバー・サービス(キー名lanmanserver)に依存しているサービスを確認するには,次のように入力する。
sc enumdepend lanmanserver
このコマンドを私のテスト用Windows Server 2003で実行してみたところ,Netlogon,Dfs,およびコンピュータ・ブラウザ・サービスが,サーバー・サービスに依存していることがわかった。
逆に,サーバー・サービスが依存しているサービスを特定するには,次のようにqcサブコマンドを使用する。
sc qc lanmanserver
このコマンドを使用すると,サービスに関して9行からなる情報が表示される。そのうちの一つがDEPENDENCIESである(SCのメッセージには大文字が多い)。このコマンドを実行すると,サーバー・サービスは他のサービスに依存していないことがわかる。
複数のサービスに依存している場合
複数のサービスに依存しているサービスの場合はどのように表示されるかを確認するには,このコマンドをNetlogonサービスに対して実行してみると良い。Netlogonの起動前にはサーバーおよびワークステーション・サービスが動作している必要があり,つまり,この二つのサービスにNetlogonが依存していることがわかる。依存性は一つのサービスが他の一つのサービスを必要とするような,簡単なものではない場合もある。例えば,あるサービスは他の三つのサービスのいずれかが起動している場合にのみ起動する(三つすべてが動いている必要はなく,いずれか一つで十分である)。このような動的な指定を行うには,あるサービスがサービスのグループに依存していることを情報として与える。
Windowsには,SCSI CDROMクラス,SCSI miniport,Parallel arbitrator,NetBIOSGroup,NDIS,およびPrimary Diskサービスなど,このようなサービスがいくつかある。グループ内のすべてのサービスおよびドライバは次のコマンドで確認できる。
sc query type= service|driver|all group= <"グループ名">
例えば,Primary Diskサービス・グループのすべてのサービスおよびドライバを確認するには,次のように入力する。
sc query type= all group= "primary disk"
グループ名では大文字と小文字は区別されない。グループに対するサービスの追加,または新しいサービス・グループの作成は,「group= グループ名」コマンドをsc createコマンドに追加するか,またはsc configを使用してサービスのグループメンバーシップを変更することによって行うことができる。
例えば,Webimagemailerを新しいグループ「unimportant」に追加するには次のコマンドを実行する。
sc config webimagemailer group= unimportant
私がこれまで調べた限りでは,サービスまたはドライバを複数のサービス・グループに登録することはできない。
特定のグループが動作してしない場合はWebimagemailerをロードしないように,Windowsに対して指示することもできる。架空のwebstartupグループを指定するには,「depends= webstartup」パラメータを指定する。webstartupがグループであり,他のサービスでないことを示すため,名前の前にプラスの記号を付加する。
例えば,webimagemailerがwebstartup起動グループに依存するように再構成するには,次のように入力する。
sc config webimagemailer depends= +webstartup
サービスのロード順序をより明確に制御するための,依存関係およびグループの使用方法を見てきた。私が2,3年前にSCを見つけたときになぜ喜んだか,これでわかってもらえると思う。