我需要激活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秒内响应!但是,只有在运行外部命令时才能将CMD集成到C#中,并且从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
查询不起作用,为什么?
答案 0 :(得分:1)
根据您提供的WMIC查询,您只会拉“ Name”属性,这可以提高性能,从而使查询仅运行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();
这应该运行得很快,因为它只能获取您正在使用的两个属性。