获取服务信息,而WMI
目前我正在写一小块的代码来获得在远程系统上的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,然后是否有其他方法可以访问我使用上述代码获得的信息?
对不起,作为noob,但我如何执行一个查询,就像我在WMI上做的一样,以获得在IIS上运行的服务列表! – 2011-05-31 12:37:46
请参阅此处的示例[获取服务状态的Windows命令?](http://stackoverflow.com/questions/802121/windows-command-to-get-service-status/802188#802188) – lsalamon 2011-05-31 13:14:49
使用[ServiceController](http ://msdn.microsoft.com/en-us/library/system.serviceprocess.servicecontroller.aspx)如果您想要与OS上安装的服务交互,class是在.Net中执行此操作的正确方法。 – 2011-05-31 18:51:21
我已经转换这从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;
}
你的代码是一个好的开始,不得不改变DirectoryEntry行,添加w3svc/1/root然后列出条目。网络服务在那里:) – 2011-06-20 08:23:01
你的问题没有意义。您的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
如果你看到我在代码下面写的句子,那么它是否有意义?无论如何,我现在使用SC来获取服务列表,它的工作正常,但我无法检索远程系统上安装在IIS中的网站列表:/任何指针? – 2011-06-02 05:02:08
您的问题没有意义,因为即使WMI在远程系统上可联系,您编写的代码也不会执行您想要的操作。 SC.exe将只能带回服务器上安装的服务,这不是你想要的。您在服务器的OS和Web服务上安装的服务令人困惑。他们是完全不同的实体。 – 2011-06-02 12:38:53