PDA

Ver la Versión Completa : WMI- Error en parametro


MAXIUM
31-10-2010, 02:26:46
Me arroja el siguiente error de parámetros y no se que puede ser.

objWMIService.ExecMethod('Win32_WindowsProductActivation', 'SetProductKey', objInParams);


program GetWMI_Info;

{$APPTYPE CONSOLE}

uses
SysUtils,
ActiveX,
ComObj,
Variants;

function VarArrayToStr(const vArray: variant): string;

function _VarToStr(const V: variant): string;
var
Vt: integer;
begin
Vt := VarType(V);
case Vt of
varSmallint,
varInteger : Result := IntToStr(integer(V));
varSingle,
varDouble,
varCurrency : Result := FloatToStr(Double(V));
varDate : Result := VarToStr(V);
varOleStr : Result := WideString(V);
varBoolean : Result := VarToStr(V);
varVariant : Result := VarToStr(Variant(V));
varByte : Result := char(byte(V));
varString : Result := String(V);
varArray : Result := VarArrayToStr(Variant(V));
end;
end;

var
i : integer;
begin
Result := '[';
if (VarType(vArray) and VarArray)=0 then
Result := _VarToStr(vArray)
else
for i := VarArrayLowBound(vArray, 1) to VarArrayHighBound(vArray, 1) do
if i=VarArrayLowBound(vArray, 1) then
Result := Result+_VarToStr(vArray[i])
else
Result := Result+'|'+_VarToStr(vArray[i]);

Result:=Result+']';
end;

function VarStrNull(const V:OleVariant):string; //avoid problems with null strings
begin
Result:='';
if not VarIsNull(V) then
begin
if VarIsArray(V) then
Result:=VarArrayToStr(V)
else
Result:=VarToStr(V);
end;
end;


function GetWMIObject(const objectName: String): IDispatch; //create the Wmi instance
var
chEaten: Integer;
BindCtx: IBindCtx;
Moniker: IMoniker;
begin
OleCheck(CreateBindCtx(0, bindCtx));
OleCheck(MkParseDisplayName(BindCtx, StringToOleStr(objectName), chEaten, Moniker));
OleCheck(Moniker.BindToObject(BindCtx, nil, IDispatch, Result));
end;

procedure Invoke_Win32_WindowsProductActivation_SetProductKey;
var
objWMIService : OLEVariant;
objInvoker : OLEVariant;
objInParams : OLEVariant;
objOutParams : OLEVariant;
begin
objWMIService := GetWMIObject(Format('winmgmts:\\%s\%s',['.','root\CIMV2']));
objInvoker := objWMIService.Get('Win32_WindowsProductActivation');
objInParams := objInvoker.Methods_.Item('SetProductKey').InParameters.SpawnInstance_();
objInParams.ProductKey:= '7777755555777775555577777';
objOutParams := objWMIService.ExecMethod('Win32_WindowsProductActivation', 'SetProductKey', objInParams);
Writeln('ReturnValue '+VarStrNull(objOutParams.ReturnValue));
end;


begin
try
CoInitialize(nil);
try
Invoke_Win32_WindowsProductActivation_SetProductKey;
Readln;
finally
CoUninitialize;
end;
except
on E:Exception do
begin
Writeln(E.Classname, ':', E.Message);
Readln;
end;
end;
end.