Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi "Die Beschreibung der Ereigniskennung" unterdrücken? (https://www.delphipraxis.net/64339-die-beschreibung-der-ereigniskennung-unterdruecken.html)

pduck 2. Mär 2006 11:26


"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

pduck 10. Mär 2006 15:02

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:
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;
4. Dienst installieren und testen.

Muetze1 10. Mär 2006 15:09

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?

pduck 13. Mär 2006 09:40

Re: "Die Beschreibung der Ereigniskennung" unterdr
 
Zitat:

Zitat von Muetze1
Es ist wirklich nicht möglich die Resource bei dem Service selber einzubinden und einfach den Service in der Registry anzugeben?

Ich habe mich so auf die Aussage eines Beispiels verlassen, dass ich es gar nicht proberit hatte :) Ja, es geht, einfach die RES-Datei in die Service-Exe reinkompilieren.

Danke, dass Du mich vom Schlauch runtergeholt hast :oops:

GuenterS 3. Aug 2006 17:13

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:
   00000000  |%1
So schaut der Eintrag in der Messagetable aus.

Ich schreibe meine Logs mit

Delphi-Quellcode:
LogMessage('TEST');
Leider kommt in der Ereignisanzeige immer noch
Zitat:

Die Beschreibung der Ereigniskennung ( 0 ) in ( MyProgram Service ) 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: MyProgram Service; Execute.
Ich habe auch versucht in dem ServiceAfterInstall Ereignis, den geposteten Code einzutragen, aber leider kennt mein Programm TWD_Config nicht. Ich bin mir auch nicht ganz sicher ob man das überhaupt braucht, wenn ich das Posting über mir richtig verstanden habe, dass man die Resource auch direkt in des Service einbinden kann.

Kann mir da vielleicht jemand helfen?

pduck 3. Aug 2006 19:58

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:
   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;
Erzeugt in meinem Programm nur einen weiteren Key für meine Konfigurationsdatei. Den brauchst Du nicht!!!

Was Du aber brauchst ist dieser Block, der den Verweis auf die Datei mit der Ressource gibt:
Delphi-Quellcode:
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;
Wobei du anstatt NWDServiceEventDLLName = 'WDEventLogMsg.dll'; im String den Namen deiner Service-Exe angeben musst. Die Variable kannst Du natürlich auch umbenennen ;)

GuenterS 3. Aug 2006 20:01

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 :)

Luckie 3. Aug 2006 22:37

Re: "Die Beschreibung der Ereigniskennung" unterdr
 
Zitat:

Zitat von Muetze1
1. Vorschlag dies in die Code Library mit aufzunehmen

Gibt es doch schon bei den Tutorials. Zu dem noch ausführlicher und mit Demo: http://www.delphipraxis.net/internal...ct.php?t=88278

GuenterS 4. Aug 2006 08:03

Re: "Die Beschreibung der Ereigniskennung" unterdr
 
Zitat:

Zitat von Luckie
Zitat:

Zitat von Muetze1
1. Vorschlag dies in die Code Library mit aufzunehmen

Gibt es doch schon bei den Tutorials. Zu dem noch ausführlicher und mit Demo: http://www.delphipraxis.net/internal...ct.php?t=88278

Das Tutorial ist datiert mit Juli und der Beitrag von Muetze war im März...

Luckie 4. Aug 2006 12:06

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 00:11 Uhr.
Seite 1 von 2  1 2      

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