我在使用.NET ManagementObject 对象调用SoftwareLicensingProduct.GetTokenActivationGrants WMI方法时遇到问题。 GetTokenActivationGrants 具有以下签名:
uint32 GetTokenActivationGrants(
[out] string Grants[]
);
我正在使用以下C#代码:
class Program
{
private const string GRANTS_METHOD = "GetTokenActivationGrants";
static void Main(string[] args)
{
ManagementObjectSearcher productSearch = new ManagementObjectSearcher("SELECT ID, Name, ApplicationId, PartialProductKey, Description, LicenseIsAddon " +
"FROM SoftwareLicensingProduct WHERE ApplicationId = '55c92734-d682-4d71-983e-d6ec3f16059f' AND PartialProductKey <> NULL " +
"AND LicenseIsAddon = FALSE");
foreach (ManagementObject product in productSearch.Get())
{
ManagementBaseObject inParams = product.GetMethodParameters(GRANTS_METHOD);
ManagementBaseObject outParams = product.InvokeMethod(GRANTS_METHOD, inParams, null);
}
}
}
由于 GetMethodParameters 返回null,我认为发生的 System.Runtime.InteropServices.COMException 失败了。有谁知道如何正确调用这样一个具有引用参数的方法?
答案 0 :(得分:1)
正如@Hans评论的那样,这是一个预期的错误。问题是MSDN库中的任何位置都没有记录任何预期或可能的错误。通过一点挖掘,您可以在%SystemRoot%\System32\slmgr\0409\slmgr.ini
或http://gallery.technet.microsoft.com/office/68b80aba-130d-4ad4-aa45-832b1ee49602中找到它们。