2010-11-05 14 views
4

J'ai une question sur la classe WMI Win32_WindowsProductActivation et la méthode SetProductKey.Question sur la classe WMI Win32_WindowsProductActivation et la méthode SetProductKey

quand je lance ce code (vbscript) généré avec le créateur de code WMI, l'exécution échoue avec l'erreur 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 

mais si j'utilise ce code fonctionne bien, en utilisant la méthode 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 

les quiestions est

pourquoi le premier échoue code? ou pourquoi cette classe wmi nécessite d'exécuter cette méthode en utilisant le InstancesOf?

Répondre

1

vous devez appeler et passer directement les paramètres de SetProductKey méthode sans utiliser la SpawnInstance_ parce que cette méthode est non statique.

la règle est, si la méthode wmi à exécuter est statique, vous pouvez utiliser le SpawnInstance_ autrement appeler la méthode qui passe directement les paramètres

Ici vous avez une description des méthodes statiques et non.static.

Les méthodes statiques ne s'appliquent qu'aux WMI classes et non à des cas spécifiques d'une classe. Par exemple, la méthode Créer de la classe Win32_Process est une méthode statique car l'utiliser pour créer un nouveau processus sans une instance de cette classe. Les méthodes non statiques appliquent uniquement aux instances d'une classe. Pour par exemple, la méthode Terminate de la classe Win32_Process est une méthode non statique car il est logique de terminer un processus si une instance de ce processus existe. Vous pouvez déterminer si une méthode est statique en vérifiant si le qualificateur statique est associé à la méthode.

De plus, vous pouvez consulter cet article Calling a Provider Method