hallo,
ich verwende folgenden quellcode (ist aus einem beispiel aus dem forum hier) um mir einträge aus dem ereignisprotokoll anzeigen zu lassen. leider bekomme ich bei windows xp nur leere Messages und bei win 2000 server teilweise nur leere messages zurückgeliefert. wo ist der fehler ?
anmerkung: die gleiche abfrage im wmi-tool liefert auch eine leere message auf dem xp rechner und "vernünftige" messages auf dem 2000 rechner.
<PRE>
procedure CreateEventListForService (VAR EventListItems : TListItems; SourceName : String);
VAR
aLoc : ISWbemLocator;
aSrv : ISWbemServices;
aObjSet : ISWbemObjectSet;
pEnum : IEnumVARIANT;
vOut : OleVariant;
dwRetrieved : LongWord;
hRes : HResult;
s : String;
act_ListItem : TListItem;
begin
aLoc := CoSWbemLocator.Create;
aSrv := aLoc.ConnectServer('','', '','','','',0, nil);
aSrv.Security_.ImpersonationLevel := wbemImpersonationLevelImpersonate;
aObjSet := aSrv.ExecQuery('SELECT EventType, Message, TimeGenerated ' +
'FROM Win32_NTLogEvent WHERE Logfile="Application" AND SourceName="' + SourceName + '"',
'WQL', 0, nil);
pEnum := aObjSet.Get__NewEnum as IEnumVARIANT;
while (TRUE) do
begin
hRes := pEnum.Next(1, vOut, dwRetrieved);
if hRes <> S_OK then
Break;
act_ListItem := EventListItems.Add;
s := Stringreplace(VarToStr(vOut.Message),#13,'',[rfReplaceAll, rfIgnoreCase]);
s := Stringreplace(s,#10,'',[rfReplaceAll, rfIgnoreCase]);
act_ListItem.Caption := s;
act_ListItem.ImageIndex := vOut.EventType;
act_ListItem.SubItems.Add(Copy(vOut.TimeGenerated, 7,2) + '.' + Copy(vOut.TimeGenerated,5,2) + '.' + Copy(vOut.TimeGenerated,1,4));
act_ListItem.SubItems.Add(Copy(vOut.TimeGenerated, 9,2) + ':' + Copy(vOut.TimeGenerated,11,2) + ':' + Copy(vOut.TimeGenerated,13,2));
end;
end;</PRE>
ich verwende folgenden quellcode (ist aus einem beispiel aus dem forum hier) um mir einträge aus dem ereignisprotokoll anzeigen zu lassen. leider bekomme ich bei windows xp nur leere Messages und bei win 2000 server teilweise nur leere messages zurückgeliefert. wo ist der fehler ?
anmerkung: die gleiche abfrage im wmi-tool liefert auch eine leere message auf dem xp rechner und "vernünftige" messages auf dem 2000 rechner.
<PRE>
procedure CreateEventListForService (VAR EventListItems : TListItems; SourceName : String);
VAR
aLoc : ISWbemLocator;
aSrv : ISWbemServices;
aObjSet : ISWbemObjectSet;
pEnum : IEnumVARIANT;
vOut : OleVariant;
dwRetrieved : LongWord;
hRes : HResult;
s : String;
act_ListItem : TListItem;
begin
aLoc := CoSWbemLocator.Create;
aSrv := aLoc.ConnectServer('','', '','','','',0, nil);
aSrv.Security_.ImpersonationLevel := wbemImpersonationLevelImpersonate;
aObjSet := aSrv.ExecQuery('SELECT EventType, Message, TimeGenerated ' +
'FROM Win32_NTLogEvent WHERE Logfile="Application" AND SourceName="' + SourceName + '"',
'WQL', 0, nil);
pEnum := aObjSet.Get__NewEnum as IEnumVARIANT;
while (TRUE) do
begin
hRes := pEnum.Next(1, vOut, dwRetrieved);
if hRes <> S_OK then
Break;
act_ListItem := EventListItems.Add;
s := Stringreplace(VarToStr(vOut.Message),#13,'',[rfReplaceAll, rfIgnoreCase]);
s := Stringreplace(s,#10,'',[rfReplaceAll, rfIgnoreCase]);
act_ListItem.Caption := s;
act_ListItem.ImageIndex := vOut.EventType;
act_ListItem.SubItems.Add(Copy(vOut.TimeGenerated, 7,2) + '.' + Copy(vOut.TimeGenerated,5,2) + '.' + Copy(vOut.TimeGenerated,1,4));
act_ListItem.SubItems.Add(Copy(vOut.TimeGenerated, 9,2) + ':' + Copy(vOut.TimeGenerated,11,2) + ':' + Copy(vOut.TimeGenerated,13,2));
end;
end;</PRE>
Comment