AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein EventLog speichern/in Anwendung importieren
Thema durchsuchen
Ansicht
Themen-Optionen

EventLog speichern/in Anwendung importieren

Ein Thema von ByTheTime · begonnen am 9. Jun 2013 · letzter Beitrag vom 13. Jun 2013
Antwort Antwort
Seite 1 von 2  1 2      
ByTheTime

Registriert seit: 24. Sep 2011
Ort: Frankfurt
297 Beiträge
 
Delphi XE2 Architect
 
#1

EventLog speichern/in Anwendung importieren

  Alt 9. Jun 2013, 21:20
Moin,
ich möchte ein EventLog in mein Programm einlesen. Unter Computer>Verwalten kann man ja die Verschiedenen Eventlogs auch als *.txt-Datei speichern, was mir schon reicht. Das ganze möchte ich dann wieder in Delphi importieren. An sich ist das auch kein Problem, allerdings möchte ich auf Buttonklick, das ein bestimmtes, oder alle Eventlogs gespeichert werden, mit ich sie dann einlesen kann. Habe schon einige Beispiele gefunden, wie es mit der Windows PowerShell funktioniert, allerdings scheint mir das nicht die sauberste Lösung zu sein. Geht das auch anders? Noch besser wäre, die Daten direkt abzugreifen, ohne das überhaupt eine Datei gespeichert wird. Wobei ich hieran selbst zweifel

MfG
Lukas
Lukas
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: EventLog speichern/in Anwendung importieren

  Alt 10. Jun 2013, 00:48
Hier gab es einen Beitrag dazu read the Windows EventLog with WMI
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#3

AW: EventLog speichern/in Anwendung importieren

  Alt 10. Jun 2013, 08:54
Das Binärformat der Dateien ist eigentlich recht simpel - ich schau mal, ob ich meine Unit von internen Abhängigkeiten befreien kann.

Edit: nicht so einfach, daher nur die wichtigsten Infos:
Delphi-Quellcode:
   TEventLogFixedHeader = packed record
      Length, Magic, MessageNumber, DateCreated, DateWritten, EventID: DWord;
      EventType, StringCount, EventCategory, ReservedFlags: Word;
      ClosingRecordNumber, StringOffset, UserSidLength, UserSidOffset, DataLength, DataOffset: DWord;
   end;

   TEventLogVariableHeader = record
      SourceName, ComputerName: string;
      SID: string;
      Strings: array of string;
      // Data
      // Pad
      Length: DWord;
   end;

Geändert von CCRDude (10. Jun 2013 um 09:11 Uhr)
  Mit Zitat antworten Zitat
ByTheTime

Registriert seit: 24. Sep 2011
Ort: Frankfurt
297 Beiträge
 
Delphi XE2 Architect
 
#4

AW: EventLog speichern/in Anwendung importieren

  Alt 10. Jun 2013, 18:41
Danke erstmal für die antworten. Ich habe nochmal ein bisschen geforscht. Es gibt zwar tausende Beispiele zum schreiben in das EventLog, allerdings nicht, wie man es ausließt.

Das WMI Beispiel erscheint mir ganz schlüssig, allerdings hapert es hier an "VarArrayLowBound":

Delphi-Quellcode:
procedure GetWin32_NTLogEventInfo;
const
  WbemUser = '';
  WbemPassword = '';
  WbemComputer = 'localhost';
  wbemFlagForwardOnly = $00000020;
var
  FSWbemLocator: OLEVariant;
  FWMIService: OLEVariant;
  FWbemObjectSet: OLEVariant;
  FWbemObject: OLEVariant;
  oEnum: IEnumvariant;
  iValue: LongWord;
  Insertion: array of String;
  Data: array of Byte;
  I: integer;
begin;
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService := FSWbemLocator.ConnectServer(WbemComputer, 'root\CIMV2',
    WbemUser, WbemPassword);
  FWbemObjectSet := FWMIService.ExecQuery
    ('SELECT * FROM Win32_NTLogEvent Where Logfile=''Application''', 'WQL',
    wbemFlagForwardOnly);
  oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumvariant;
  while oEnum.Next(1, FWbemObject, iValue) = 0 do
  begin
    try

      if not VarIsNull(FWbemObject.Data) then
      begin
        Data := FWbemObject.Data;
        for I := VarArrayLowBound(Data) to VarArrayLowBound(Data) do // Fehler!
          Showmessage(IntToStr(Data[I])); // Array of Uint8
      end;

      if not VarIsNull(FWbemObject.InsertionStrings) then
      begin
        Insertion := FWbemObject.InsertionStrings;
        for I := VarArrayLowBound(Insertion) to VarArrayLowBound(Insertion) do // Fehler!
          Showmessage(Insertion[I]);
      end;

    except
      on E: Exception do
      begin
        MessageDlg(E.Message, mtError, [mbOK], 0);
      end;
    end;

    FWbemObject := Unassigned;
  end;
end;
VarArrayLowBound verlangt den 2. Parameter "Dim" vom Typ Integer. Bin ich ehrlich gesgat etwas aufgeschmissen, weil ich nicht weiß, was DIM/Dim bedeutet

[EDIT]: Habe gearde was von der Jedi Komponente TJvNetEventLog erfahren. Die werde ich mir auch nochmal genauer anschauen
Lukas

Geändert von ByTheTime (10. Jun 2013 um 18:57 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: EventLog speichern/in Anwendung importieren

  Alt 10. Jun 2013, 19:00
Delphi-Quellcode:
      if not VarIsNull(FWbemObject.Data) then
      begin
        for I := VarArrayLowBound(FWbemObject.Data,1) to VarArrayLowBound(FWbemObject.Data,1) do
          Showmessage(IntToStr(FWbemObject.Data[I])); // Array of Uint8
      end;

      if not VarIsNull(FWbemObject.InsertionStrings) then
      begin
        for I := VarArrayLowBound(FWbemObject.InsertionStrings,1) to VarArrayLowBound(FWbemObject.InsertionStrings,1) do
          Showmessage(FWbemObject.InsertionStrings[I]);
      end;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
ByTheTime

Registriert seit: 24. Sep 2011
Ort: Frankfurt
297 Beiträge
 
Delphi XE2 Architect
 
#6

AW: EventLog speichern/in Anwendung importieren

  Alt 10. Jun 2013, 20:13
Okay danke Bin schon ein ganzes Stück weiter gekommen. Hier mal mein Code-Schnippsel. Ist zwar jetzt unschön programmiert, aber ich habe es jetzt für meine Experimete erstmal hingezweckt:

Delphi-Quellcode:
procedure TfrmMain.GetWin32_NTLogEventInfo;
const
  WbemUser = '';
  WbemPassword = '';
  WbemComputer = 'localhost';
  wbemFlagForwardOnly = $00000020;
var
  FSWbemLocator: OLEVariant;
  FWMIService: OLEVariant;
  FWbemObjectSet: OLEVariant;
  FWbemObject: OLEVariant;
  oEnum: IEnumvariant;
  iValue: LongWord;
  Insertion: array of String;
  Data: array of Byte;
  I: integer;
begin;
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService := FSWbemLocator.ConnectServer(WbemComputer, 'root\CIMV2',
    WbemUser, WbemPassword);
  FWbemObjectSet := FWMIService.ExecQuery
    ('SELECT * FROM Win32_NTLogEvent Where Logfile=''Application''', 'WQL',
    wbemFlagForwardOnly); // Wird hier das Log angegeben?!
  oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumvariant;
  while oEnum.Next(1, FWbemObject, iValue) = 0 do
  begin
    try

      if not VarIsNull(FWbemObject.Data) then
        if not VarIsNull(FWbemObject.InsertionStrings) then
        begin
          Data := FWbemObject.Data;
          Insertion := FWbemObject.InsertionStrings;
          for I := VarArrayLowBound(Data, 1) to VarArrayLowBound(Data, 1) do
            MLog.Lines.Add('Code ' + IntToStr(Data[I]) + ':' + Insertion[I]);
        end;

    except
      on E: Exception do
      begin
        MessageDlg(E.Message, mtError, [mbOK], 0);
      end;
    end;

    FWbemObject := Unassigned;
  end;
end;
Allerdings weiß ich nicht, aus welchem Log er das ausließt Laut dem Code zufolge ja aus dem Application-Log. Ich kann das irgendwie in keinen sinvollen zusammenhang setzen
Lukas
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#7

AW: EventLog speichern/in Anwendung importieren

  Alt 10. Jun 2013, 20:28
Die Frage/Antwort aus dem Link war anscheinend schon beschränkt auf Knackpunkte mit den Arrays.
Der weiterführende Link auf Rodrigo's Seite zeigt was noch alles zu bekommen ist.
Gegf. sind ja die Projekte WMI Class Generator oder WMI Delphi Code Creator auch etwas für Dich.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
ByTheTime

Registriert seit: 24. Sep 2011
Ort: Frankfurt
297 Beiträge
 
Delphi XE2 Architect
 
#8

AW: EventLog speichern/in Anwendung importieren

  Alt 10. Jun 2013, 21:35
Ah danke, habe den link oben im 1. Post aus stack irgendwie eben erst bemerkt, da steht ja noch einiges Ich glaube vom WMI Generator lass ich aber erstmal die Finger, sieht total umfangreich aus. Ich möchte eigentlich nur prüfen, ob die aktuellste zeile einen fehler enthält. Also wenn eine Zeile dazukommt, das Programm diese ausließt, sich "anschaut" z.B. den Code und dann eben diesen weiterverarbeitet (wenn da zum beispiel kommt, Code 21, Update nicht erfolgreich). Dazu scheint mir der Inhalt der Seite erstmal zu reichen.
Lukas
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: EventLog speichern/in Anwendung importieren

  Alt 10. Jun 2013, 22:24
Events lesen geht viel einfacher über die entsprechende EventLogging API, z.B. mit ReadEventLog:
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

AW: EventLog speichern/in Anwendung importieren

  Alt 10. Jun 2013, 23:35
Eventuell hilft dir der EventLogLister von Assarbad weiter: http://assarbad.net/en/stuff
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz