0

我在尝试使用 .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);
        }

    }
}

这失败并出现System.Runtime.InteropServices.COMException,我认为这是因为GetMethodParameters返回 null 而发生的。有谁知道如何正确调用像这样具有引用参数的方法?

4

1 回答 1

1

正如@Hans 评论的那样,这是一个预期的错误。问题是在 MSDN 库中的任何地方都没有记录任何预期或可能的错误。稍加挖掘,您就可以在%SystemRoot%\System32\slmgr\0409\slmgr.inihttp://gallery.technet.microsoft.com/office/68b80aba-130d-4ad4-aa45-832b1ee49602找到它们。

于 2013-10-03T20:03:22.733 回答