Einzelnen Beitrag anzeigen

Hobbycoder

Registriert seit: 22. Feb 2017
961 Beiträge
 
#1

TService.LogMessage erzeugt "Das Handle ist ungültig" in Ereignisanzeige

  Alt 8. Nov 2017, 07:59
Hi,

ich versuch's noch mal mit passenderem Titel.

Ziel ist es, mit einer ServiceApplication Einträge in das Eventlog von Windows zu schreiben, ohne dass die Meldung "Beschreibung für die Ereignis-ID "x" aus der Quelle "y" wird nicht gefunden....." kommt.
Wie das geht hat Luckie in seinem Tutorial sehr gut beschrieben.

Doch irgendwie bekomme ich es nicht hin, oder mache irgendwo einen entscheidenden Fehler. Denn nicht nur, dass diese Meldung nicht verschwindet, sondern unter im Ereigniseintrag steht auch noch "Das Handle ist ungültig".

Hier mal was ich gemacht habe:
Im AfterServiceInstall setze ich die Registry-Einträge:
Code:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\TestAnwendung]
"EventMessageFile"="C:\\Test\\TestService.exe"
"CategoryMessageFile"="C:\\Test\\TestService.exe"
"CategoryCount"=dword:00000005
"TypesSupported"=dword:00000007
Dann habe ich mir eine TestServerEventLog.mc mit folgendem Inhalt angelegt:
Code:
LanguageNames=(German=0x407:MSG00407)

MessageID=0x1
Symbolicname=CAL
Language=German
Allgemein
.

MessageID=0x2
Symbolicname=CAN
Language=German
Anruf
.

MessageID=0x3
Symbolicname=CLI
Language=German
Lizenzinformation
.

MessageID=0x4
Symbolicname=CIN
Language=German
Informationen
.

MessageID=0x5
Symbolicname=CFE
Language=German
Fehler
.
diese mit mc und brcc32 in eine TestAnwendungEnventLog.res übersetzt und in die Mainunit des Service eingebunden.

Und mit dieser Funktion
Delphi-Quellcode:
  LizenzMessage:='Lizenzinformationen:'+#13#10;
  LizenzMessage:='Seriennummer:'+#13#10;
  LizenzMessage:='Registriert für:'+#13#10;
  LizenzMessage:=Lizenz.Firma+#13#10;
  LizenzMessage:=Lizenz.Vorname+' '+Lizenz.Name+#13#10;
  LizenzMessage:=Lizenz.Strasse+#13#10;
  LizenzMessage:=Lizenz.PLZ+' '+Lizenz.Stadt+#13#10;
  LizenzMessage:='Telefon: '+Lizenz.Telefon+#13#10;
  LizenzMessage:='E-Mail: '+Lizenz.EMail+#13#10;
  LizenzMessage:='Seriennr: '+Lizenz.SerienNr+#13#10;
  LogMessage(LizenzMessage, EVENTLOG_INFORMATION_TYPE, 1, 4);
schreiben ich nun meinen Eintrag ins EreignisLog. Er kommt auch an, aber nicht so wie ich möchte.

Code:
Die Beschreibung für die Ereignis-ID "4" aus der Quelle "TestAnwendung" wurde nicht gefunden. Entweder ist die Komponente, die dieses Ereignis auslöst, nicht auf dem lokalen Computer installiert, oder die Installation ist beschädigt. Sie können die Komponente auf dem lokalen Computer installieren oder reparieren.

Falls das Ereignis auf einem anderen Computer aufgetreten ist, mussten die Anzeigeinformationen mit dem Ereignis gespeichert werden.

Die folgenden Informationen wurden mit dem Ereignis gespeichert:

SerienNr: abcdef


Das Handle ist ungültig
Ich muss ja einen Fehler gemacht haben. Nur erkenne ich ihn nicht. Vielleicht hat jemand einen Tipp für mich.

Zusammenfassen noch mal die 3 Probleme:
1. Die Meldung "Die Beschreibung für die Ereignis-ID...." sollte nicht kommen
2. "Das Handle ist ungültig" sollte nicht kommen
3. Vom meinen übergebenen String wird nur die letzte Zeile geschrieben. Ich möchte aber mehr ausgeben.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat