Hallo zusammen,
ich habe mir sehr viele Tutorials und Threads durchgelesen, komme aber einfach nicht darauf, was ich falsch mache.
Ich möchte im Prinzip einfach einen Informationseintrag in der Ereignisanzeige protokollieren.
Dafür habe ich mir zu erst eine TextDatei mit folgendem Inhalt erstellt:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| LanguageNames=(German=0x407:MSG00407)
MessageId=0x1 SymbolicName=First_CAT Language=German Erste Kategorie .
MessageId=0x10 SymbolicName=Firt_Msg Language=German Eintrag: %1 . |
und anschließend als *.mc-Datei abgespeichert. Diese habe ich dann mit dem Message Compiler kompiliert und die entstandene *.rc Datei anschließend mit dem Ressource Compiler in eine *.res-Datei gewandelt.
Diese habe ich per Compiler-Direktive in meine Main-Unit eingebunden.
Anschließend habe ich noch folgende Registrierungseinträge gesetzt:
Windows Registry Editor Version 5.00
Quelltext
1: 2: 3: 4: 5:
| [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\report] "EventMessageFile"="\"C:\\%PATH%\\report.exe\"" "TypesSupported"=dword:00000000 "CategoryCount"=dword:00000001 "CategoryMessageFile"="\"C:\\%PATH%\\report.exe\"" |
Mein Code sieht folgendermaßen aus:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46:
| unit ErrorReport;
interface
uses Windows;
function LogEvent( ComputerName: String; EventType, CategoryID: Integer; MessageID: Cardinal; Parameter: String): DWORD; function GetMachineName(): String;
implementation
function LogEvent( ComputerName: String; EventType, CategoryID: Integer; MessageID: Cardinal; Parameter: String): DWORD; var hEventLog : THandle; MsgArray : array[0..0] of PChar; begin result := 0; hEventLog := OpenEventLogA( PChar(ComputerName), PChar('report') );
if( hEventLog <> 0 ) then begin MsgArray[0] := PChar(Parameter);
if not( ReportEventA(hEventLog, EventType, CategoryID, MessageID, nil, 1, 0, @MsgArray, nil) ) then result := GetLastError(); CloseEventLog( hEventLog ); end else result := GetLastError(); end;
function GetMachineName(): String; var Size: DWORD; begin Size := MAX_COMPUTERNAME_LENGTH + 1; SetLength( result, Size ); if GetComputerNameA( PChar(result), Size ) then SetLength( result, Size ) else result := ''; end;
end. |
Und so rufe ich das Ganze zum testen auf:
Delphi-Quelltext
1: 2: 3: 4: 5:
| LogEvent( GetMachineName(), EVENTLOG_SUCCESS, 1, 1, 'Neue Datei gefunden' ); |
Ich bekomme aber immer folgenden Text in der Beschreibugn angezeigt:
Die Beschreibung der Ereigniskennung ( 1 ) in ( report ) wurde nicht gefunden. Der lokale Computer verfügt nicht über die zum Anzeigen der Meldungen von einem Remotecomputer erforderlichen Registrierungsinformationen oder DLL-Meldungsdateien. Möglicherweise müssen Sie das Flag /AUXSOURCE= zum Ermitteln der Beschreibung verwenden. Weitere Informationen stehen in Hilfe und Support. Ereignisinformationen: Neue Datei gefunden.
Ich habe auch schon versucht, das ganze als DLL zu kompilieren und diese dann in den Pfaden für die Registry anzugeben ... das führte aber zu selbigem Ergebnis.
Was mache ich falsch?