【发布时间】:2013-10-02 17:51:33
【问题描述】:
我在尝试使用 .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。有谁知道如何正确调用像这样具有引用参数的方法?
【问题讨论】:
-
COMException 类有一个名为 ErrorCode 的属性。你得到什么错误代码?
-
错误码是-1073417466。
-
此错误的含义如下:软件许可服务报告此软件版本不支持基于令牌的激活。
-
感谢@Hans,我自己就能够解决这个问题。您是否在任何地方找到错误代码列表?我只能在
%SystemRoot%\System32\slmgr\0409\slmgr.ini找到它。 -
这里是错误代码的链接:gallery.technet.microsoft.com/office/…