![]() |
"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. ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:30 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