Einzelnen Beitrag anzeigen

pduck

Registriert seit: 2. Mär 2006
11 Beiträge
 
Delphi 2006 Professional
 
#2

Re: "Die Beschreibung der Ereigniskennung" unterdr

  Alt 10. Mär 2006, 15:02
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.
  Mit Zitat antworten Zitat