Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Windows Server 2019 Temp Pfad (https://www.delphipraxis.net/206576-windows-server-2019-temp-pfad.html)

zeras 8. Jan 2021 07:46

Windows Server 2019 Temp Pfad
 
Guten Morgen,

ich habe folgende Funktion, die mir im Temppfad einen Unterordner erstellt. Dies klappt auch bei einem "normalen" Windows 10 prof.
Nun habe ich das Programm auf einem Windows Server 2019 Standard gestartet und bekomme dann die Meldung angezeigt, dass der Pfad nicht erstellt werden kann.
Dies könnte ich noch ändern, indem ich einen Pfad in C:\temp erstelle. Aber ich nutze ein externes Programm, welches auch in diesen Pfad schreiben will. Da dies nicht klappt, bricht das Programm ab.
Habt ihr eine Idee?


Delphi-Quellcode:
 fname := IncludeTrailingPathDelimiter(TPath.GetTempPath) + s;
  if Not DirectoryExists(fname) then begin
    if not ForceDirectories(fname) then begin
      ShowMessage('lokaler Temp Pfad kann nicht angelegt werden!'
                  + #10#13
                  + fname);
      exit;
    end;
  end

Redeemer 8. Jan 2021 09:49

AW: Windows Server 2019 Temp Pfad
 
Klingt komisch. Wie lautet der Pfad? Macht es einen Unterschied, ob das Programm als Administrator läuft? Läuft es überhaupt als ein Benutzer oder als Dienst? Funktioniert GetEnvironmentVariable('TEMP')?

Übrigens ist
Delphi-Quellcode:
if not DirectoryExists(fname) then begin
if not ForceDirectories(fname) then begin
doppelt. ForceDirectories schließt DirectoryExists ein.

zeras 8. Jan 2021 10:37

AW: Windows Server 2019 Temp Pfad
 
Liste der Anhänge anzeigen (Anzahl: 1)
Wenn ich zum Test das so aufrufe, kommt ein leerer String raus.
Delphi-Quellcode:
ShowMessage(Format('TPath.GetTempPath = "%s"', [TPath.GetTempPath]));

Nutze ich
Delphi-Quellcode:
ShowMessage(Format('GetEnvironmentVariable("Temp") = "%s"', [GetEnvironmentVariable('Temp')]));
, dann kommt auf jeden Fall erst einmal ein String raus, der so aussieht, als wenn dieser OK wäre.

Als Admin kann ich das Programm nicht starten, da ich keine Adminrechte habe.
Das Programm wird nur gestartet (liegt aber auf einem anderen Laufwerk, also nicht auf dem Server) und läuft nicht als Dienst.

Ich habe von der Meldung des anderen Programms mal den Pfad per CMD erstellt und siehe da, es geht nun offenbar. Was mich aber verwundert, ist dass hinter c:\users\xxxx\temp\ noch eine "3" im Pfad steht, siehe Anhang. Dieses habe ich alles per Hand erstellt und nun kommen auch bei beiden Aufrufen oben der Pfad zum Temp Ordner.
Was hat aber der Unterpfad "3" für eine Bewandnis?

Redeemer 8. Jan 2021 22:10

AW: Windows Server 2019 Temp Pfad
 
Ich hab auf der Kiste hier nur XE2 drauf, da ist TPath.GetTempPath das als Winapi.Windows.GetTempPath definiert. Zu dessen Verhalten siehe hier. Möglicherweise ist die TMP-Variable falsch definiert? Das erklärt aber nicht, warum es nach Anlegen des Pfades geht. In Server 2019 gibt es wohl einen Bug mit dem Temp-Pfad, aber da GetTempPath keine Prüfung durchführt, dürfte das egal sein.

Wie es zu der 3 kommt, weiß ich nicht, da würd ich mal GetTempPath untersuchen, was das so tut.

himitsu 9. Jan 2021 00:27

AW: Windows Server 2019 Temp Pfad
 
TPath.GetTempPath benutzt Bei Google suchenGetTempPath, gefolgt von einem Bei Google suchenGetLongPathName.

Leider ist die Fehlerbehandlung von TPath.GetTempPath eher grauenhaft, denn ein TempVerzeichnis muß es immer geben
und wenn die Funktion dennoch mal nichts liefert, dann sollte da besser eine Fehlermeldung geworfen werden, anstatt grob fahrlässig einen Leerstring rauszugeben.


Ach ja, ich empfehle dir eher Delphi-Referenz durchsuchensLineBreak, wenn du die Semantik von Zeilenumbrüchen nicht verstehst.
#10#13 ist definitiv falsch. (#10, #13 oder #13#10 ... aber #10#13 sind zwei gemischte Zeilenumbrüche, also #10+#13)

zeras 9. Jan 2021 07:56

AW: Windows Server 2019 Temp Pfad
 
Zitat:

Zitat von himitsu (Beitrag 1480618)

Ach ja, ich empfehle dir eher Delphi-Referenz durchsuchensLineBreak, wenn du die Semantik von Zeilenumbrüchen nicht verstehst.
#10#13 ist definitiv falsch. (#10, #13 oder #13#10 ... aber #10#13 sind zwei gemischte Zeilenumbrüche, also #10+#13)

Danke für den Hinweis.
Ich werde das in neuen Projekten beachten und im aktuellen noch korrigieren.

harfes 9. Jan 2021 08:18

AW: Windows Server 2019 Temp Pfad
 
Hast Du mal den Admin des 2019er-Servers befragt, ob dieser aus Sicherheitsgründen den Temp-Ordner verändert hat (wegen der "3")? Manche Admins machen das, um Malware diesen einfachen Weg zu versperren, ihren Mist zu verbreiten bzw vorzubereiten... Ich vermute, dass deswegen auch Dein von Hand eingetragener Pfad funktioniert.

Hartmut

himitsu 9. Jan 2021 12:53

AW: Windows Server 2019 Temp Pfad
 
Zitat:

Zitat von harfes (Beitrag 1480623)
Hast Du mal den Admin des 2019er-Servers befragt,

Unser RDP-Server macht das.

Und mit GetTempPath gibt es da keine Probleme, denn dafür ist es ja eigentlich auch da, um diesen aktuellen Pfad zu bekommen.
Wird bei jedem Neustart einer Session hochgezählt.

zeras 9. Jan 2021 16:35

AW: Windows Server 2019 Temp Pfad
 
Zitat:

Zitat von harfes (Beitrag 1480623)
Hast Du mal den Admin des 2019er-Servers befragt, ob dieser aus Sicherheitsgründen den Temp-Ordner verändert hat (wegen der "3")? Manche Admins machen das, um Malware diesen einfachen Weg zu versperren, ihren Mist zu verbreiten bzw vorzubereiten... Ich vermute, dass deswegen auch Dein von Hand eingetragener Pfad funktioniert.

Hartmut

Ich werde nächste Woche mal den Admin fragen, ob ihm das bewußt ist oder nicht. Dann gebe ich wieder Bescheid.

generic 9. Jan 2021 21:28

AW: Windows Server 2019 Temp Pfad
 
Also unter Admin ist das oft c:\windows\temp

Du kannst wie du schon schreibst, dass TEMP umbiegen via Umgebungsvariablen. Musst halt schauen, dass die globalen Hinzeigen und ggf. nicht durch Benutzer TEMPs überschrieben werden.
Jedes Konto hat sein eigenes TEMP.

C:\temp klingt für mich nach Problemen mit Dateisystemrechten - unter umständen darf nur der Ersteller da reinschreiben.

Aber da kannst du ja eine passende ACL drauf setzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:25 Uhr.
Seite 1 von 2  1 2      

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