我需要激活 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 中我没有完整的查询访问权限时,我才能将 CMD 集成到 C# 中
此查询有效:
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 查询,您只提取“名称”属性,这会提高您的性能,因此您的查询仅运行 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();
它应该运行得相当快,因为它只获取您正在使用的两个属性。

