Unter Win XP nie ein Problem gewesen.
Klar, weil du immer als Administrator gearbeitet hast. bei mir würde dein Programm nicht funktionieren, weil es keine Schreibrechte im Programmeordner hätte, da ich nur als normaler Benutzer an meinem Rechner arbeite.
Zitat:
Unter Win7 (64) auch kein Problem, sofern das Programm nicht in einem der Systemverzeichnisse (system/programme usw.) liegt.
Weil du da auch keine Schreibrechte hast. Selbst wenn du als Administrator unter Vista und höher angemeldet bist, hast du erst mal nur eingeschränkte Rechte, es sei denn dein Programm hat ein Manifest, welches höhere rechte anfordert, dann poppt die
UAC auf.
Zitat:
Wird das Programm aber im App-Verzeichnis (C:\Program Files (x86)) installiert, wird der temp-Ordner automatisch im VirtualStore gespeichert.
Habe ich die Sache mit den Rechten schon erwähnt?
Damit auch alte Programme laufen, die es "gewöhnt" waren als Administrator ausgeführt zu werden (Standardkonto bei XP), hat Microsoft die Virtualisierung entwickelt, welche solche Schreibzugriffe einfach umbiegt.
Zitat:
Um damit verbundene Probleme einfach zu umgehen, suche ich einen (windows-versionen-übergreifenden) Ordner, in dem ich mein temp anlegen könnte. Ich habe es dann auch mit dem Windows-temp-Verzeichnis (ermittelt aus den Umgebungsvariablen) versucht, aber das klappt nicht (directoryexists macht dann schon Probleme).
Benutze das Temporäreverzeichnis, dafür ist es da. Und so kannst du den Pfad ermitteln:
Delphi-Quellcode:
function GetTempDir():
string;
var
Size: DWORD;
Len: DWORD;
begin
Size := MAX_PATH;
SetLength(Result, Size);
Len := GetTempPath(Size, PChar(Result));
if Len > 0
then
SetLength(Result, Len)
else
raise Exception.Create(SysErrorMessage(GetLastError));
end;
Ich glaube, dein Problem ist nicht die Ermittlung des Temporärenverzeichnisses, sondern das was du danach machst in der Schleife. Lass dir mal die Zeichenkette anzeigen (Zwischenspeichern in einer Variable) und guckt, was du dir da zusammenbastelst.