2011-05-31 71 views
0

目前我正在寫一小塊的代碼來獲得在遠程系統上的IIS託管Web服務的列表,獲取服務信息,而WMI

工作代碼現在的問題是:

 string q2 = "select * from Win32_PerfFormattedData_W3SVC_WebService"; 
     ManagementScope scope2 = new ManagementScope(string.Format(@"\\dtp-robaro2\{1}", host, ns), options); 

     // ns here is string ns = @"root\cimv2"; 

     scope2.Connect(); 

     ManagementObjectSearcher search2 = new ManagementObjectSearcher(scope, new ObjectQuery(q2)); 
     foreach (ManagementObject mo in search2.Get()) 
     { 
      Console.WriteLine(mo.ClassPath); 
      Console.WriteLine(mo.GetText(TextFormat.Mof)); 
     } 

現在我想知道是否在我查詢的遠程系統上關閉了WMI,然後是否有其他方法可以訪問我使用上述代碼獲得的信息?

+1

你的問題沒有意義。您的WMI查詢實際上是查詢[W3SVC WebService計數器的性能計數器](http://msdn.microsoft.com/en-us/library/aa394298(v = vs.85).aspx?ppud = 4)。我對你試圖達到的目標感到困惑。您是否想要在操作系統上列出已安裝的系統服務,或者在IIS本身中運行的網站?無論哪種情況,使用該WMI查詢都不可能實現您的願望。 – 2011-05-31 18:46:33

+0

如果你看到我在代碼下面寫的句子,那麼它是否有意義?無論如何,我現在使用SC來獲取服務列表,它的工作正常,但我無法檢索遠程系統上安裝在IIS中的網站列表:/任何指針? – 2011-06-02 05:02:08

+0

您的問題沒有意義,因爲即使WMI在遠程系統上可聯繫,您編寫的代碼也不會執行您想要的操作。 SC.exe將只能帶回服務器上安裝的服務,這不是你想要的。您在服務器的OS和Web服務上安裝的服務令人困惑。他們是完全不同的實體。 – 2011-06-02 12:38:53

回答

1

使用的工具Service Control - SC.EXE

+0

對不起,作爲noob,但我如何執行一個查詢,就像我在WMI上做的一樣,以獲得在IIS上運行的服務列表! – 2011-05-31 12:37:46

+0

請參閱此處的示例[獲取服務狀態的Windows命令?](http://stackoverflow.com/questions/802121/windows-command-to-get-service-status/802188#802188) – lsalamon 2011-05-31 13:14:49

+1

使用[ServiceController](http ://msdn.microsoft.com/en-us/library/system.serviceprocess.servicecontroller.aspx)如果您想要與OS上安裝的服務交互,class是在.Net中執行此操作的正確方法。 – 2011-05-31 18:51:21

0

我已經轉換這從VB.Net到C#,因此它可能不會是完全正確的,但是這會做你需要的東西:

public List<string> GetSites(string MachineName) 
{ 

    List<string> siteList = new List<string>(); 

    DirectoryEntry iis = new DirectoryEntry(string.Format("IIS://{0}/w3svc/1/root", MachineName));  

    foreach (DirectoryEntry site in iis.Children) { 

     if (site.SchemaClassName == "IIsWebServer") { 
      siteList.Add(site.Properties("ServerComment").Value.ToString()); 

     } 
    } 

    return siteList; 

} 
+0

你的代碼是一個好的開始,不得不改變DirectoryEntry行,添加w3svc/1/root然後列出條目。網絡服務在那裏:) – 2011-06-20 08:23:01