Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在不使用WMI的情况下获取服务信息_C#_Wmi - Fatal编程技术网

C# 在不使用WMI的情况下获取服务信息

C# 在不使用WMI的情况下获取服务信息,c#,wmi,C#,Wmi,目前,我正在编写一小段代码,以获取远程系统中IIS上托管的web服务列表 目前的工作代码是: string q2 = "select * from Win32_PerfFormattedData_W3SVC_WebService"; ManagementScope scope2 = new ManagementScope(string.Format(@"\\dtp-robaro2\{1}", host, ns), options); // ns

目前,我正在编写一小段代码,以获取远程系统中IIS上托管的web服务列表

目前的工作代码是:

       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,那么有没有其他方法可以访问我通过上述代码获得的信息?

使用工具

我已将此从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;

}
公共列表获取站点(字符串MachineName)
{
List siteList=新列表();
DirectoryEntry iis=新的DirectoryEntry(string.Format(“iis://{0}/w3svc/1/root”,MachineName));
foreach(iis.Children中的DirectoryEntry站点){
如果(site.SchemaClassName==“IIsWebServer”){
添加(site.Properties(“ServerComment”).Value.ToString());
}
}
返回站点列表;
}

很抱歉,我是一个noob,但我如何像在WMI上一样执行查询,以获取IIS上运行的服务列表!请参阅此处的示例。如果您想与操作系统上已安装的服务交互,在.Net中使用类是正确的方法。是否可以检索服务列表?不管怎样,我正在努力!我很快就会回来的!你的问题没有道理。WMI查询实际上是在查询。我不明白你想达到什么目的。是否要列出操作系统上已安装的系统服务,或IIS中运行的网站?在任何一种情况下,使用WMI查询都不可能达到您的要求。如果您看到我在代码下面写的句子,那么它有意义吗?无论如何,我现在正在使用SC获取服务列表,它工作正常,只是我无法检索远程系统上IIS中安装的网站列表:/Any指针?您的问题没有意义,因为您编写的代码不会做您想要的事情,即使WMI在远程系统上是可联系的。SC.exe只会在服务器上带回已安装的服务,这也不是您想要的。您混淆了安装在服务器操作系统和web服务上的服务。它们是完全不同的实体。您的代码是一个良好的开端,必须更改DirectoryEntry行,添加w3svc/1/root,然后列出条目。web服务就在那里:)