Witam!
Pracuję nad zabezpieczeniem aplikacji przy pomocy funkcji WMI, mam kod procedury który się elegancko kompiluje, ale podczas uruchomienia wyrzuca błąd: "could not convert variant of type (Array variant) into type (olestr)

**

procedure GetWin32_BIOSInfo;
const
WbemUser ='';
WbemPassword ='';
WbemComputer ='localhost';
wbemFlagForwardOnly = $00000020;
var
FSWbemLocator : OLEVariant;
FWMIService : OLEVariant;
FWbemObjectSet: OLEVariant;
FWbemObject : OLEVariant;
oEnum : IEnumvariant;
iValue : LongWord;

myFile : TextFile;
vArray : variant;
begin;
FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
FWMIService := FSWbemLocator.ConnectServer(WbemComputer, 'root\CIMV2', WbemUser, WbemPassword);
FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_BIOS','WQL',wbemFlagForwardOnly);
oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
while oEnum.Next(1, FWbemObject, iValue) = 0 do
begin
Writeln(Format('BIOSVersion %s',[String(FWbemObject.BIOSVersion)]));// String
Writeln(Format('BuildNumber %s',[String(FWbemObject.BuildNumber)]));// String

Writeln('');
FWbemObject:=Unassigned;

end;
end;

**

błędy powodują komendy
Writeln(Format('BIOSVersion %s',[String(FWbemObject.BIOSVersion)]));// String
Writeln(Format('BuildNumber %s',[String(FWbemObject.BuildNumber)]));// String

Co robić?