0

PowerShell を使用してこれをかなり簡単に行うことができますが、これを行う C# の方法を探しています。PS では、Get-Service を使用してコレクションを反復処理し、そこにある DependentServices および RequiredServices と呼ばれるコレクションをチェックして、特定のサービスの依存サービスと必須サービスのリストを取得できます。

「Select * from Win32_Service」というクエリを使用して WMI モデルを調べましたが、これは、関心のあるコレクションを持っていないように見えるWin32_Serviceオブジェクトのコレクションを返します。ここで何かが欠けているように感じます。私は周りを見回してさまざまな検索を試みましたが、これを行う C# 中心の方法は見つけていません。

特定のサービスをクエリして、上記のコレクション (DependentServices および RequiredServices) を取得したいと考えています。明らかなことを見逃していたら申し訳ありませんが、関連するトピックを見つけることができませんでした。

4

3 に答える 3

2

ServiceControllerクラスを使用できます。

StringBuilder sb = new System.Text.StringBuilder();
foreach (var svc in System.ServiceProcess.ServiceController.GetServices())
{
    sb.AppendLine("============================");
    sb.AppendLine(svc.DisplayName);
    foreach (var dep in svc.DependentServices)
    {
        sb.AppendFormat("\t{0}", dep.DisplayName);
        sb.AppendLine();
    }
}

MessageBox.Show(sb.ToString());
于 2012-06-05T20:48:54.620 に答える
2

You can use the Win32_DependentService WMI class and the Associators of sentence to retrieve the dependent services.

Try this sample

using System;
using System.Collections.Generic;
using System.Management;
using System.Text;

namespace GetWMI_Info
{
    class Program
    {

        static void Main(string[] args)
        {
            try
            {
                string ComputerName = "localhost";
                ManagementScope Scope;                   
                Scope = new ManagementScope(String.Format("\\\\{0}\\root\\CIMV2", ComputerName), null);

                Scope.Connect();
                ObjectQuery Query = new ObjectQuery("Associators of {Win32_Service.Name='NetMan'} Where AssocClass=Win32_DependentService ResultClass=Win32_Service");
                ManagementObjectSearcher Searcher = new ManagementObjectSearcher(Scope, Query);

                foreach (ManagementObject WmiObject in Searcher.Get())
                {
                    Console.WriteLine("{0,-35} {1,-40}","Name",WmiObject["Name"]);// String

                }
            }
            catch (Exception e)
            {
                Console.WriteLine(String.Format("Exception {0} Trace {1}",e.Message,e.StackTrace));
            }
            Console.WriteLine("Press Enter to exit");
            Console.Read();
        }
    }
}
于 2012-06-05T21:00:47.117 に答える
1

このプロパティを使用できます -http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicecontroller.dependentservices.aspx

ServiceController sc =  new ServiceController("Event Log");
         ServiceController[] scServices = sc.DependentServices;

         // Display the list of services dependent on the Event Log service.
         if (scServices.Length == 0)
         {
            Console.WriteLine("There are no services dependent on {0}", 
                               sc.ServiceName);
         }
         else 
         {
            Console.WriteLine("Services dependent on {0}:",
                               sc.ServiceName);

            foreach (ServiceController scTemp in scServices)
            {
               Console.WriteLine(" {0}", scTemp.DisplayName);
            }
         }
于 2012-06-05T20:47:55.573 に答える