ServiceControllerクラスのインスタンスを作成し、プロパティを調べることにより、そのサービスの名前、表示名、種類、ステータス、サービスが依存しているサービス、サービスに依存しているサービスなどの情報を取得することができます。なお、ServiceControllerクラスはNT系OSでのみ使用できます。
以下の例では、ローカルコンピュータ(".")のサービス"IIS Admin Service"の情報を表示しています。
'参照設定にSystem.ServiceProcess.dllが追加されているものとする 'ServiceControllerオブジェクトの作成 Dim sc As New System.ServiceProcess.ServiceController( _ "IIS Admin Service", ".") 'サービスに関する情報を取得し、表示する Console.WriteLine("サービス名:{0}", sc.ServiceName) Console.WriteLine("表示名:{0}", sc.DisplayName) Console.WriteLine("コンピュータ名:{0}", sc.MachineName) Console.WriteLine("種類:{0}", sc.ServiceType) Console.WriteLine("ステータス:{0}", sc.Status) Console.WriteLine("一時中断、再開できるか:{0}", sc.CanPauseAndContinue) Console.WriteLine("シャットダウン時に通知の必要があるか:{0}", _ sc.CanShutdown) Console.WriteLine("停止できるか:{0}", sc.CanStop) 'サービスが依存しているサービス一覧を表示 Console.WriteLine("{0}が依存しているサービス", sc.DisplayName) Dim sdos As System.ServiceProcess.ServiceController() = _ sc.ServicesDependedOn Dim sdo As System.ServiceProcess.ServiceController For Each sdo In sdos Console.WriteLine(ControlChars.Tab + "{0}", sdo.DisplayName) Next sdo 'サービスに依存しているサービス一覧を表示 Console.WriteLine("{0}に依存しているサービス", sc.DisplayName) Dim dss As System.ServiceProcess.ServiceController() = sc.DependentServices Dim ds As System.ServiceProcess.ServiceController For Each ds In dss Console.WriteLine(ControlChars.Tab + "{0}", ds.DisplayName) Next ds
//参照設定にSystem.ServiceProcess.dllが追加されているものとする //ServiceControllerオブジェクトの作成 System.ServiceProcess.ServiceController sc = new System.ServiceProcess.ServiceController( "IIS Admin Service", "."); //サービスに関する情報を取得し、表示する Console.WriteLine("サービス名:{0}", sc.ServiceName); Console.WriteLine("表示名:{0}", sc.DisplayName); Console.WriteLine("コンピュータ名:{0}", sc.MachineName); Console.WriteLine("種類:{0}", sc.ServiceType); Console.WriteLine("ステータス:{0}", sc.Status); Console.WriteLine("一時中断、再開できるか:{0}", sc.CanPauseAndContinue); Console.WriteLine("シャットダウン時に通知の必要があるか:{0}", sc.CanShutdown); Console.WriteLine("停止できるか:{0}", sc.CanStop); //サービスが依存しているサービス一覧を表示 Console.WriteLine("{0}が依存しているサービス", sc.DisplayName); System.ServiceProcess.ServiceController[] sdos = sc.ServicesDependedOn; foreach (System.ServiceProcess.ServiceController sdo in sdos) Console.WriteLine("\t{0}", sdo.DisplayName); //サービスに依存しているサービス一覧を表示 Console.WriteLine("{0}に依存しているサービス", sc.DisplayName); System.ServiceProcess.ServiceController[] dss = sc.DependentServices; foreach (System.ServiceProcess.ServiceController ds in dss) Console.WriteLine("\t{0}", ds.DisplayName);
サービスを開始、停止、一時中断、再開するには、それぞれStart、Stop、Pause、Continueメソッドを呼び出します。またWaitForStatusメソッドを使うことにより、サービスが指定した状態になるまで待機することもできます。
Windows Vista以降でUACが有効になっている時は、管理者に昇格しないと例外InvalidOperationExceptionをスローして失敗するかもしれません。対処法については「Vista以降でUACが有効だとファイルの作成等に失敗する問題の対処法」をご覧ください。
'参照設定にSystem.ServiceProcess.dllが追加されているものとする 'ServiceControllerオブジェクトの作成 Dim sc As New System.ServiceProcess.ServiceController("Telnet", ".") If sc.Status = System.ServiceProcess.ServiceControllerStatus.Stopped Then 'サービスが停止していれば、開始する sc.Start() 'サービスが開始されるまで待機する sc.WaitForStatus(System.ServiceProcess.ServiceControllerStatus.Running) 'キャンセルできるか調べる ElseIf sc.CanStop Then 'サービスを停止する sc.Stop() 'サービスが停止するまで待機する sc.WaitForStatus(System.ServiceProcess.ServiceControllerStatus.Stopped) '一時中断、再開できるか調べる ElseIf sc.CanPauseAndContinue Then If sc.Status = System.ServiceProcess.ServiceControllerStatus.Paused Then '一時中断状態の時は続行する sc.Continue() 'サービスが開始されるまで待機する sc.WaitForStatus(System.ServiceProcess.ServiceControllerStatus.Running) Else 'サービスを中断する sc.Pause() 'サービスが中断されるまで待機する sc.WaitForStatus(System.ServiceProcess.ServiceControllerStatus.Paused) End If End If
//参照設定にSystem.ServiceProcess.dllが追加されているものとする //ServiceControllerオブジェクトの作成 System.ServiceProcess.ServiceController sc = new System.ServiceProcess.ServiceController("Telnet", "."); if (sc.Status == System.ServiceProcess.ServiceControllerStatus.Stopped) { //サービスが停止していれば、開始する sc.Start(); //サービスが開始されるまで待機する sc.WaitForStatus(System.ServiceProcess.ServiceControllerStatus.Running); } //キャンセルできるか調べる else if (sc.CanStop) { //サービスを停止する sc.Stop(); //サービスが停止するまで待機する sc.WaitForStatus(System.ServiceProcess.ServiceControllerStatus.Stopped); } //一時中断、再開できるか調べる else if (sc.CanPauseAndContinue) { if (sc.Status == System.ServiceProcess.ServiceControllerStatus.Paused) { //一時中断状態の時は続行する sc.Continue(); //サービスが開始されるまで待機する sc.WaitForStatus(System.ServiceProcess.ServiceControllerStatus.Running); } else { //サービスを中断する sc.Pause(); //サービスが中断されるまで待機する sc.WaitForStatus(System.ServiceProcess.ServiceControllerStatus.Paused); } }