![]() |
Dienst und Pfadangaben
Hallo,
das Problem mit dem Erstellen von Schattenkopien über einen Dienst konnte ich lösen. Jetzt stellt sich aber ein Problem mit den ermittelten Pfadangaben. Und zwar möchte ich eine Logdatei anlegen lassen, in der die verschiedenen Aktivitäten protokolliert werden sollen.
Delphi-Quellcode:
Ich erhalte nur eine Meldung, nachdem der Service installiert wurde, die anderen EventsLogs werden ignoriert.
const
cMyServiceLog = 'MyService\MyService.log'; procedure TMyService.Log(LogText: String); begin sLogPath := GetEnvironmentVariable('LOCALAPPDATA') + '\' + cMyServiceLog; //System.IOUtils.TFile.AppendAllText('C:\Users\amigage\AppData\Local\MyService\log.log', DateTimeToStr(Now) + ' ' + sLogPath + sLineBreak); // spätere zweite Logdatei if not DirectoryExists(ExtractFilePath(sLogPath)) then ForceDirectories(ExtractFilePath(sLogPath)); System.IOUtils.TFile.AppendAllText(sLogPath, DateTimeToStr(Now) + ' ' + LogText + sLineBreak) end;
Delphi-Quellcode:
Also habe ich eine LogDatei für die Variable sLogPath angelegt (Kommentar bei Funktion Log() entfernen).
procedure TMyService.ServiceCreate(Sender: TObject);
begin Log('BFU Service created'); end; Und siehe da, hier finden sich ganz seltsame Pfadangaben.
Code:
Warum ist das so? Ist das ein Bug oder kann ich hier nicht die gewohnten Funktionen GetEnvironmentVariable() und System.IOUtils.TPath.Combine() anwenden?
19.12.2017 15:09:22 C:\Users\amigage\AppData\Local\MyService\MyService.log
19.12.2017 15:09:28 C:\WINDOWS\system32\config\systemprofile\AppData\Local\MyService\MyService.log 19.12.2017 15:09:28 C:\WINDOWS\system32\config\systemprofile\AppData\Local\MyService\MyService.log 19.12.2017 15:13:50 C:\WINDOWS\system32\config\systemprofile\AppData\Local\MyService\MyService.log |
AW: Dienst und Pfadangaben
Lektüre zum Thema:
![]() ![]() Demnach ist der ersten Eintrag im Logfile für einen Service eher "untypisch". |
AW: Dienst und Pfadangaben
Zitat:
Übrigens halte ich es für eine ganz dumme Idee, Pfade aus Umgebungsvariablen zu ermitteln, gerade für Dienste, bei denen man überhaupt nicht weiß, ob in deren Umgebung die Variablen gesetzt sind. Besser ist es IMO, die Pfade mit den entsprechenden API-Funktionen zu ermitteln. Grüße Dalai |
AW: Dienst und Pfadangaben
Ok, danke für die Informationen.
Da ich mich das erste mal mit Services beschäftige, bin ich auch das erste Mal mit dem "Problem" in Berührung gekommen. Hatte vorher nur mit den benutzerspezifischen Ordnern zu tun und bin daher davon ausgegangen, dass ich auch hier diese Pfade erhalte :roll: |
AW: Dienst und Pfadangaben
Zitat:
Dass es nicht C:\Users\amigage\... hättest du dir eigentlich denken können, da du im anderen Beitrag bereits bemerkt hattest, dass dein Service in einem anderen Benutzerkontext läuft, welcher nicht "amigage" heißt. Selbst für einen "normalen" Benutzer muß LOCALAPPDATA nicht in C:\Users liegen, da die Verzeichnisse auch verschoben werden können. |
AW: Dienst und Pfadangaben
@Himitsu: das mit den benutzerabhängigen Pfaden ist mir bekannt, auch dass die verschoben werden können.
Mir war nur die Pfadangabe C:\WINDOWS\system32\config\systemprofile\ vollkommen neu. Ich hatte etwas anderes erwartet :lol: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz