【问题标题】:Get Service Information without WMI在没有 WMI 的情况下获取服务信息
【发布时间】:2011-05-31 07:48:11
【问题描述】:

目前我正在编写一小段代码来获取远程系统中 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,那么有没有其他方法可以访问我通过上述代码获得的信息?

【问题讨论】:

  • 你的问题没有意义。您的 WMI 查询实际上是在查询 performance counter for the W3SVC WebService counter。我对您要达到的目标感到困惑。您想列出操作系统上已安装的系统服务,还是在 IIS 本身中运行的网站?在任何一种情况下,使用该 WMI 查询都不太可能实现您想要的。
  • 如果你看到我在代码下面写的那句话,那么它有意义吗?无论如何,我现在使用 SC 来获取服务列表,它工作正常,除了我无法检索远程系统上 IIS 中安装的网站列表:/任何指针?
  • 您的问题没有意义,因为您编写的代码不会执行您想要的操作,即使 WMI 在远程系统上是可联系的。 SC.exe 只会带回服务器上已安装的服务,这也不是您想要的。您混淆了安装在服务器操作系统和 Web 服务上的服务。它们是完全不同的实体。

标签: c# wmi


【解决方案1】:

【讨论】:

  • 抱歉我是个菜鸟,但是我如何像在 WMI 上一样执行查询以获取在 IIS 上运行的服务列表!
  • 如果您想与操作系统上已安装的服务进行交互,使用 ServiceController 类是在 .Net 中执行此操作的正确方法。
  • 可以只检索服务列表吗?无论如何,我正在努力!很快就会回来!
【解决方案2】:

我已将它从 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 然后列出条目。网络服务在那里:)
猜你喜欢
  • 1970-01-01
  • 2012-10-24
  • 1970-01-01
  • 1970-01-01
  • 2012-01-16
  • 2011-01-23
  • 1970-01-01
  • 1970-01-01
  • 2012-03-21
相关资源
最近更新 更多