![]() |
"Die Beschreibung der Ereigniskennung" unterdrücke
Hallo,
leider finde ich nirgends einen Hinweis wie man diese Meldung im Ereignislog unterdrückt: "Die Beschreibung der Ereigniskennung ( 0 ) in ( NASWatchdog ) wurde nicht gefunden. [...]" Erzeugt wird sie mittels TService.LogMessage(...). Vielen Dank Alexander |
Re: "Die Beschreibung der Ereigniskennung" unterdr
So mittlerweile habe ich mich durch verschiedene Antwortschnippsel gearbeitet. Es führt wohl kein Weg um das Einbinden einer Ressourcen-DLL herum.
Der einfachste Weg (meiner Ansicht nach) sei hier beschrieben: 1. Erstellen einer Ressourcendatei mit dem XN Ressource Editor: -> AddRessource vom type MessageTable -> AddString mit ID=0 und String=%1 (%1 reicht den Ereignisstring durch!) -> Speichern als .res Datei 2. Erstellen eines DLL Projekts und Einbinden der Ressource {$R XYZ.res}. Als DLL kompilieren. 3. In der TService-Unit im ServiceAfterInstall-Trigger sicherstellen, dass ein entsprechender Registry Schlüssel mit Verweis auf die DLL erstellt wird. Z.B. so:
Delphi-Quellcode:
4. Dienst installieren und testen.
procedure TNASWatchdog.ServiceAfterInstall(Sender: TService);
const STR_REGKEY_SVC = '\SYSTEM\CurrentControlSet\Services\'; STR_REGKEY_EVENTMSG = '\SYSTEM\CurrentControlSet\Services\Eventlog\Application\'; STR_REGVAL_EVENTMESSAGEFILE = 'EventMessageFile'; STR_REGVAL_TYPESSUPPORTED = 'TypesSupported'; STR_REGVAL_CONFIGFILE = 'ConfigurationFile'; STR_REGVAL_IMAGEPATH = 'ImagePath'; NWDServiceEventDLLName = 'WDEventLogMsg.dll'; var Reg : TRegistry; ImagePath : string; begin try Reg:=TRegistry.Create; Reg.RootKey:=HKEY_LOCAL_MACHINE; if Reg.OpenKey(STR_REGKEY_SVC + self.Name,False) then begin ImagePath:=Reg.ReadString(STR_REGVAL_IMAGEPATH); Reg.WriteString(STR_REGVAL_CONFIGFILE,ExtractfilePath(ImagePath) + TWD_Config.GetDefaultConfigFileName()); Reg.CloseKey; end; if Reg.OpenKey(STR_REGKEY_EVENTMSG + self.Name,True) then begin Reg.WriteString(STR_REGVAL_EVENTMESSAGEFILE,ExtractfilePath(ImagePath) + NWDServiceEventDLLName); Reg.WriteInteger(STR_REGVAL_TYPESSUPPORTED,7); Reg.CloseKey; end; FreeAndNil(Reg); except if Assigned(Reg) then FreeAndNil(Reg); end; end; |
Re: "Die Beschreibung der Ereigniskennung" unterdr
1. Vorschlag dies in die Code Library mit aufzunehmen
2. Das "If Assigned() Then" im Except Block kann weggelassen werden. 3. Es reicht ein .Free - FreeAndNil ist bei einer lokalen Variable eh nutzlos 4. Ich würde aussen um den Try Except Block ein Try/Finally Block bauen, welcher die "Reg" Instanz freigibt. Es ist wirklich nicht möglich die Resource bei dem Service selber einzubinden und einfach den Service in der Registry anzugeben? |
Re: "Die Beschreibung der Ereigniskennung" unterdr
Zitat:
Danke, dass Du mich vom Schlauch runtergeholt hast :oops: |
Re: "Die Beschreibung der Ereigniskennung" unterdr
Hallo, ich habe das selbe Problem mit der Ereignisanzeige.
Habe mir mit diesem XN Resource Editor eine Resource erzeugt und diese in mein Service eingebunden.
Code:
So schaut der Eintrag in der Messagetable aus.
00000000 |%1
Ich schreibe meine Logs mit
Delphi-Quellcode:
Leider kommt in der Ereignisanzeige immer noch
LogMessage('TEST');
Zitat:
Kann mir da vielleicht jemand helfen? |
Re: "Die Beschreibung der Ereigniskennung" unterdr
Also ohne den Registryeintrag geht es nicht, da sich hier das E-Log die Information herholt wie der Eintrag für den Service erstellt werden soll.
Der erste Block in dem Code:
Delphi-Quellcode:
Erzeugt in meinem Programm nur einen weiteren Key für meine Konfigurationsdatei. Den brauchst Du nicht!!!
if Reg.OpenKey(STR_REGKEY_SVC + self.Name,False) then
begin ImagePath:=Reg.ReadString(STR_REGVAL_IMAGEPATH); Reg.WriteString(STR_REGVAL_CONFIGFILE,ExtractfilePath(ImagePath) + TWD_Config.GetDefaultConfigFileName()); Reg.CloseKey; end; Was Du aber brauchst ist dieser Block, der den Verweis auf die Datei mit der Ressource gibt:
Delphi-Quellcode:
Wobei du anstatt NWDServiceEventDLLName = 'WDEventLogMsg.dll'; im String den Namen deiner Service-Exe angeben musst. Die Variable kannst Du natürlich auch umbenennen ;)
if Reg.OpenKey(STR_REGKEY_EVENTMSG + self.Name,True) then
begin Reg.WriteString(STR_REGVAL_EVENTMESSAGEFILE,ExtractfilePath(ImagePath) + NWDServiceEventDLLName); Reg.WriteInteger(STR_REGVAL_TYPESSUPPORTED,7); Reg.CloseKey; end; |
Re: "Die Beschreibung der Ereigniskennung" unterdr
Nein, es sollte eigentlich nur 'test' drin stehen.
Ich konnte die Procedure von Dir nicht ganz übernehmen, da ich auch nicht genau wußte was denn nun da reingeschrieben werden soll. Ich soll da also den Pfad zu der Exe datei eingeben die den Service darstellt und die Resource enthält? Probier ich gleich mal aus. Cool jetzt funktionierts. Dankeschön für die Hilfe :) |
Re: "Die Beschreibung der Ereigniskennung" unterdr
Zitat:
![]() |
Re: "Die Beschreibung der Ereigniskennung" unterdr
Zitat:
|
Re: "Die Beschreibung der Ereigniskennung" unterdr
Ups. Hab enicht gesehen, dass du das Thema wieder nach oben geholt hast. Aber eventuell hilft dir das Tutorial trotzdem. ;)
|
AW: "Die Beschreibung der Ereigniskennung" unterdrücken?
Ziemlich altes Thema. Ich zieh das noch mal hoch.
Ich habe das grad mal so übernommen, wie es oben beschrieben steht. So ganz habe ich das aber noch nicht durchschaut. Stand der Dinge: Ich habe im AfterServiceInstall den Registryschlüssel gesetzt und in meiner .res-datei die MessageTable mit 00000000=%1. Das scheint Windows (in meinem Fall ein Server 2008) schon mitbekommen zu haben. Denn jetzt steht in dem Eventeintrag unter "Das Handle ist ungültig". Der Schlüssel im Registry zeigt auch auf meine Service-EXE. Das ![]() Enspricht ja im Grund dem, was hier im Thread steht + einiges mehr. Also habe ich mir noch eine EventLog.res mit den Kategorien erstellt und eingebunden. Auch die Registry-Einträge CategoryMessageFile und CategoryCount habe ich erstellt. Das Eventlog meckert, dass die "Bechreibung der Ereignis-ID ...aus der Quelle ..." nicht gefunden wurden. Und am Ende steht noch "Das Handle ist ungültig" Kann mir mal jemand den Schlauch unter den Füßen wegziehen? |
AW: "Die Beschreibung der Ereigniskennung" unterdrücken?
Hallo,
es wäre nett wenn ihr bei solchen Beiträgen auch dazu schreibt um was es eigentlich geht. Ich bin erst durch auf einen Link auf das Tutorial darauf gekommen dass es sich wohl um die Windows Ereignisanzeige handelt. |
Eintrag in dei Ereignisanzeit "Das Handle ist ungültig"
Der Thread ist schon Uralt. Aber um nicht alles wieder auf's neue zu beschreiben habe ich den einfach mal wieder hochgezogen.
Den Titel kann ich nicht ändern. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz