Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

AW: Nichtvirtualisierter Ordner auf Win7?

  Alt 9. Sep 2011, 09:45
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat