2009-05-09 9 views

答えて

21

using System.Management; 

static void EnumServices(string host, string username, string password) 
{ 
    string ns = @"root\cimv2"; 
    string query = "select * from Win32_Service"; 

    ConnectionOptions options = new ConnectionOptions(); 
    if (!string.IsNullOrEmpty(username)) 
    { 
     options.Username = username; 
     options.Password = password; 
    } 

    ManagementScope scope = 
     new ManagementScope(string.Format(@"\\{0}\{1}", host, ns), options); 
    scope.Connect(); 

    ManagementObjectSearcher searcher = 
     new ManagementObjectSearcher(scope, new ObjectQuery(query)); 
    ManagementObjectCollection retObjectCollection = searcher.Get(); 
    foreach (ManagementObject mo in retObjectCollection) 
    { 
     Console.WriteLine(mo.GetText(TextFormat.Mof)); 
    } 
} 
.Net 2.0 ServiceController.GetServices()

FWIWは、ここに明示的なホスト、ユーザ名、パスワードを使用して、C#/ WMIの方法です

+0

に言及することができ、ご希望のサービス名をごシステムのサービス名をチェックしますありがとうございました。すべての回答がWMIとSystem.Managementを指摘してくれました。私はクエリが好きで、このスニペットを使いました。 thxもう一度。 -k2 – kkelly18

+0

@AK_なぜ私の編集をロールバックしましたか? – Dan

+0

@ダン申し訳ありませんが、間違ったタブでロールバックしました...固定しました... –

5

これにはwmi(System.Management)を使用できます。 ServiceController.GetServices()を使用することもできます。

34

ServiceController.GetServices( "machineName")は、特定のマシンのServiceControllerオブジェクトの配列を返します。

この

namespace AtYourService 
{ 
    using System; 
    using System.ServiceProcess; 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      ServiceController[] services = ServiceController.GetServices(); 

      foreach (ServiceController service in services) 
      { 
       Console.WriteLine(
        "The {0} service is currently {1}.", 
        service.DisplayName, 
        service.Status); 
      } 

      Console.Read(); 
     } 
    } 
} 

は生成します。

アプリケーション体験サービスは 現在実行されています。

Andrea STフィルターサービスサービス は現在実行中です。

アプリケーションレイヤゲートウェイサービス サービスは現在停止しています。

アプリケーション情報サービスは現在実行中の です。

など...もちろん

は、私は私のマシン上のサービスを取得するために、パラメータなしのバージョンを使用していました。私はこの前の質問で実装偽装してソリューションをチェックアウトしたいServiceControllerのメソッドを使用するには

3

これは、あなたがパラメータ

namespace ServiceName 
{ 
using System; 
using System.ServiceProcess; 

class Service 
{ 

public static bool IsServiceInstalled(string serviceName) 
{ 

ServiceController[] services = ServiceController.GetServices(); 

foreach (ServiceController service in services) 
{ 
    if (service.ServiceName == serviceName) 
    return true; 
} 
return false; 
    } 
} 
} 
関連する問題