Вопрос о классе WMI Win32_WindowsProductActivation и методе SetProductKey - PullRequest
4 голосов
/ 05 ноября 2010

У меня есть вопрос о Win32_WindowsProductActivation классе WMI и методе SetProductKey.

при запуске этого кода (vbscript), созданного с помощью создателя кода WMi, выполнение завершается с ошибкой Invalid parameter

strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
' Obtain an instance of the the class 
' using a key property value.
Set objShare = objWMIService.Get("Win32_WindowsProductActivation")

' Obtain an InParameters object specific
' to the method.
Set objInParam = objShare.Methods_("SetProductKey"). _
    inParameters.SpawnInstance_()


' Add the input parameters.
objInParam.Properties_.Item("ProductKey") =  "QW4HDDQCRGHM64M6GJRK8K83T"

' Execute the method and obtain the return status.
' The OutParameters object in objOutParams
' is created by the provider.
Set objOutParams = objWMIService.ExecMethod("Win32_WindowsProductActivation", "SetProductKey", objInParam)

' List OutParams
Wscript.Echo "Out Parameters: "
Wscript.echo "ReturnValue: " & objOutParams.ReturnValue

но если я использую этот код, то все в порядке, используя метод InstancesOf.

Dim VOL_PROD_KEY
VOL_PROD_KEY =  "QW4HDDQCRGHM64M6GJRK8K83T"

for each Obj in GetObject("winmgmts:{impersonationLevel=impersonate}").InstancesOf ("win32_WindowsProductActivation")

result = Obj.SetProductKey (VOL_PROD_KEY)

if err <> 0 then
WScript.Echo Err.Description, "0x" & Hex(Err.Number)
Err.Clear
end if

Next

вопросы

почему первый код не работает? или почему этот класс wmi требует выполнения этого метода, используя InstancesOf?

1 Ответ

1 голос
/ 28 марта 2011

Вы должны вызывать и передавать напрямую параметры SetProductKey метода без использования SpawnInstance_, потому что этот метод нестатический .

правило, если метод wmiчтобы выполнить статический метод, вы можете использовать SpawnInstance_, иначе вызвать метод, передав напрямую параметры

. Здесь у вас есть описание статических и нестатических методов.только для классов WMI, а не для конкретных экземпляров класса.Например, метод Create класса Win32_Process является статическим методом, поскольку он используется для создания нового процесса без экземпляра этого класса.Нестатические методы применяются только к экземплярам класса.Например, метод Terminate класса Win32_Process является нестатическим методом, поскольку имеет смысл завершать процесс, только если существует экземпляр этого процесса.Вы можете определить, является ли метод статическим, проверив, связан ли с ним классификатор Static.

Дополнительно вы можете проверить эту статью Calling a Provider Method

...