Delphi-PRAXiS

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. ;)

Hobbycoder 7. Nov 2017 12:26

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 Tutorial von Luckie habe ich auch durchgearbeitet.
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?

freimatz 7. Nov 2017 12:40

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.

Hobbycoder 7. Nov 2017 12:47

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 11:23 Uhr.

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