MEINserver Service – Logmeldungen werden über TEventLogger
ausgegeben.
Damit die Ereignisanzeige nicht mit den Worten beginnt:
Die Beschreibung für die Ereignis-ID „0“ aus der Quelle „MEINserver“
wurde nicht gefunden. Entweder ist die Komponente, die dieses Ereignis auslöst,
nicht auf dem lokalen Computer installiert, oder die Installation ist
beschädigt. Sie können die Komponente auf dem lokalen Computer installieren
oder reparieren. Falls das Ereignis auf einem anderen Computer aufgetreten ist,
mussten die Anzeigeinformationen mit dem Ereignis gespeichert werden. Die
folgenden Informationen wurden mit dem Ereignis gespeichert:
muss eine res-Datei erstellt und für die Ereignisanzeige zur Verfügung
gestellt werden.
Die Datei meinServer_Message.mc erstellen. (Bitte den Punkt und die
Leerzeile nach jedem beachten)
LanguageNames=(German=0x407:MSG00407)
MessageId=0x2
SymbolicName=Kategorie_1
Language=German
Kategorie 1
.
MessageId=0x10
SymbolicName=MSG_SERVER_MELDUNG
Language=German
MEINserver: %1
.
Mit Hilfe von mc.exe und brcc32.exe die
Datei meinServer_Message.res erzeugen. (mc.exe stammt aus dem
Microsoft
Windows 10 SDK )
@"c:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x86\mc.exe" meinServer_Message.mc
@brcc32 meinServer_Message.rc -fo meinServer_Message.res
@pause
Die Resourcendatei im Projekt einbinden
program meinServer;
uses
SvcMgr,
...
tools_web in '..\tools\tools_web.pas';
{$R *.res}
{$R meinServer_Message.res}
begin
if not SvcMgr.Application.DelayInitialize or SvcMgr.Application.Installing then
SvcMgr.Application.Initialize;
SvcMgr.Application.CreateForm(TmeinServe, meinServer);
SvcMgr.Application.Run;
end.
Beim Setup des Services muss die Message-Datei in die Registry eingetragen
werden:
const
cEventLogger_MEINserver = 'MEINserver';
cEventLogger_MEINserver_Category = $02;
cEventLogger_MEINserver_ID = $20;
procedure WriteRegistryFuerEventlog(reg: TRegistry);
const
REG_CategoryCount = 'CategoryCount';
REG_TypesSupported = 'TypesSupported';
REG_EventMessageFile = 'EventMessageFile';
REG_CategoryMessageFile = 'CategoryMessageFile';
cCategoryCount = 1;
cTypesSupported = 0;
var
aMessageFile: string
begin
aMessageFile := ExtractFilePath(Application.ExeName) + 'meinServer.exe';
reg.RootKey := HKEY_LOCAL_MACHINE;
if reg.OpenKey('SYSTEM\CurrentControlSet\Services\Eventlog\Application\' + cEventLogger_MEINserver, True) then
begin
if reg.ValueExists(REG_CategoryCount) then
begin
if reg.ReadInteger(REG_CategoryCount) <> cCategoryCount then
reg.WriteInteger(REG_CategoryCount, cCategoryCount);
end
else
begin
reg.WriteInteger(REG_CategoryCount, cCategoryCount);
end;
if reg.ValueExists(REG_TypesSupported) then
begin
if reg.ReadInteger(REG_TypesSupported) <> cTypesSupported then
reg.WriteInteger(REG_TypesSupported, cTypesSupported);
end
else
begin
reg.WriteInteger(REG_TypesSupported, cTypesSupported);
end;
if reg.ValueExists(REG_EventMessageFile) then
begin
if reg.ReadString(REG_EventMessageFile) <> aMessageFile then
reg.WriteString(REG_EventMessageFile, aMessageFile);
end
else
begin
reg.WriteString(REG_EventMessageFile, aMessageFile);
end;
if reg.ValueExists(REG_CategoryMessageFile) then
begin
if reg.ReadString(REG_CategoryMessageFile) <> aMessageFile then
reg.WriteString(REG_CategoryMessageFile, aMessageFile);
end
else
begin
reg.WriteString(REG_CategoryMessageFile, aMessageFile);
end;
end
else
begin
abort;
end;
end;
Anzeige der Meldungen in der Power-Shell
Get-EventLog -LogName Application -Source HEIMserver | format-table -wrap
Literatur