WMI 查询太慢

WMI query too slow

我需要激活 Office 或需要激活并且我在 WMI 中使用普通查询:

 ManagementObjectSearcher searcher =
                        new ManagementObjectSearcher("root\CIMV2",
                        "SELECT * FROM " + wmi + " WHERE Name LIKE \"%Office%\" ");

                    foreach (ManagementObject queryObj in searcher.Get())
                    { 
                        queryObj["Name"].ToString() + "', '" + queryObj["LicenseStatus"].ToString();                           

但是这个查询有时需要 45/50 秒,现在我必须了解如何替换它或加速它,因为如果我从 CMD 使用这个命令

WMIC /NAMESPACE:\root\CIMV2 PATH SoftwareLicensingProduct WHERE LicenseStatus=1 GET Name

它在 2 秒内响应!但是我不能在 C# 中集成 CMD,只有 运行 外部命令和来自 CMD 我没有完整的查询访问权限

此查询有效:

WMIC /NAMESPACE:\root\CIMV2 PATH SoftwareLicensingProduct WHERE "name like '%Office%'" Get Name

现在添加 LicenseStatus=1

WMIC /NAMESPACE:\root\CIMV2 PATH SoftwareLicensingProduct WHERE "name like '%Office%'" and LicenseStatus=1 Get Name

而且查询不起作用,为什么?

根据您提供的 WMIC 查询,您只拉动了 "Name" 属性,这提高了您的性能,因此您的查询仅 运行s 持续 2 秒。

所以这个...

WMIC /NAMESPACE:\root\CIMV2 PATH SoftwareLicensingProduct WHERE LicenseStatus=1 GET Name

将在您的代码中转换为该查询...

SELECT Name FROM SoftwareLicensingProduct WHERE LicenseStatus=1

你的另一个例子是正确的,但你只需要将第二个引号移到上面

WMIC /NAMESPACE:\root\CIMV2 PATH SoftwareLicensingProduct WHERE "name like '%Office%' and LicenseStatus=1" Get Name

在您的代码中,它看起来像这样(我也将 LicenseStatus 添加到查询中,因为您在例程中引用了 属性)

ManagementObjectSearcher searcher =
                        new ManagementObjectSearcher("root\CIMV2",
                        "SELECT Name, LicenseStatus FROM " + wmi + " WHERE Name LIKE \"%Office%\" and LicenseStatus=1");

                    foreach (ManagementObject queryObj in searcher.Get())
                    { 
                        queryObj["Name"].ToString() + "', '" + queryObj["LicenseStatus"].ToString();

那应该 运行 相当快,因为​​它只获取您正在使用的两个属性。