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();
那应该 运行 相当快,因为它只获取您正在使用的两个属性。
我需要激活 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();
那应该 运行 相当快,因为它只获取您正在使用的两个属性。