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.