Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Betriebssysteme (https://www.delphipraxis.net/27-betriebssysteme/)
-   -   Dienst und Pfadangaben (https://www.delphipraxis.net/194667-dienst-und-pfadangaben.html)

amigage 19. Dez 2017 14:49

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:
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;
Ich erhalte nur eine Meldung, nachdem der Service installiert wurde, die anderen EventsLogs werden ignoriert.

Delphi-Quellcode:
procedure TMyService.ServiceCreate(Sender: TObject);
begin
  Log('BFU Service created');
end;
Also habe ich eine LogDatei für die Variable sLogPath angelegt (Kommentar bei Funktion Log() entfernen).
Und siehe da, hier finden sich ganz seltsame Pfadangaben.
Code:
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
Warum ist das so? Ist das ein Bug oder kann ich hier nicht die gewohnten Funktionen GetEnvironmentVariable() und System.IOUtils.TPath.Combine() anwenden?

Delphi.Narium 19. Dez 2017 15:01

AW: Dienst und Pfadangaben
 
Lektüre zum Thema:

https://social.technet.microsoft.com...w7itproinstall

https://serverfault.com/questions/93...l-system-accou

Demnach ist der ersten Eintrag im Logfile für einen Service eher "untypisch".

Dalai 19. Dez 2017 15:08

AW: Dienst und Pfadangaben
 
Zitat:

Zitat von amigage (Beitrag 1389278)
Und siehe da, hier finden sich ganz seltsame Pfadangaben.

Welche davon findest du seltsam? C:\WINDOWS\system32\config\systemprofile ist das Profilverzeichnis des Nutzers SYSTEM. AppData und LocalAppData sind nunmal Pfade, die für jeden Nutzer unterschiedlich sind; die Pfade der Systemnutzer liegen eben in geschützten Systemverzeichnissen. Eigentlich ganz einfach.

Ü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

amigage 19. Dez 2017 15:17

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:

himitsu 19. Dez 2017 15:42

AW: Dienst und Pfadangaben
 
Zitat:

Zitat von amigage (Beitrag 1389282)
Hatte vorher nur mit den benutzerspezifischen Ordnern zu tun und bin daher davon ausgegangen, dass ich auch hier diese Pfade erhalte :roll:

Es sind auch nutzerspezifische Verzeichnisse ... nur eben für den anderen Benutzer sind es natürlich andere Verzeichnisse.
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.

amigage 19. Dez 2017 16:00

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 21:08 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