2011-05-31 97 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