![]() |
Nichtvirtualisierter Ordner auf Win7?
Moin zusammen,
ich habe jetzt eine geschlagene Stunde gesucht, aber nichts geeignetes gefunden: In meinem Programm wird im Programmverzeinis (extract..paramstr(0)) ein temp-Ordner erstellt, in dem Daten abgelegt und aufgerufen werden. Unter Win XP nie ein Problem gewesen. Unter Win7 (64) auch kein Problem, sofern das Programm nicht in einem der Systemverzeichnisse (system/programme usw.) liegt. Wird das Programm aber im App-Verzeichnis (C:\Program Files (x86)) installiert, wird der temp-Ordner automatisch im VirtualStore gespeichert. 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). Hat jemand eine Idee a) wie ich den VirtualStore über mein Programm deaktivieren oder b) für einen virtualstore-unabhängigen, aber systemübergreifenden Ordner? Danke und schöne Grüße aus dem Süden, Frieder |
AW: Nichtvirtualisierter Ordner auf Win7?
Zitat:
Zitat:
|
AW: Nichtvirtualisierter Ordner auf Win7?
Hallo Bernhard,
danke für Deine Antwort: - Problem 1 (D5): "Manifest": - Gibt es hierzu ein Tutorial? Ich habe bislang keine Ahnung von den Parametern, welche wie sein müssen, damit das Programm automatisch alle Zugriffsrechte hat. Von himitsu habe ich folgendes gefunden, aber kann eben nicht beurteilen, ob das schon reicht: ![]() - Problem 2: Windows-temp-Verzeichnis habe ich versucht: Habe das Verzeichnis ermittelt und prüfe, ob bereits ein "meintemp" da ist (beim Starten von mehreren Instanzen des eigenen Progs). Leider produziert directoryexists (D5) immer true, obwohl def. kein Temp-Verzeichnis da ist:
Delphi-Quellcode:
Woran kann das liegen?
function GetTempDir: string;
var Dir: string; Len: DWord; begin SetLength(Dir,MAX_PATH); Len:=GetTempPath(PChar(Dir),MAX_PATH); if Len>0 then begin SetLength(Dir,Len); Result:=Dir; end else RaiseLastOSError; end; while DirectoryExists(pchar(tempdirstr + '\meintemp' + inttostr(i))) do inc(i); //--> Endlosschleife.. CreateDir(tempdirstr + '\meintemp' + inttostr(i)); Danke und Gruß, frieder |
AW: Nichtvirtualisierter Ordner auf Win7?
Zitat:
Im allgemeinen finde ich aber den ganzen Ansatz falsch. Man programmiert für Windows und sollte sich an die Konventionen halten. Also eben NICHT Exename oder paramstr Gefrickel, sondern SHGetSpecialFolder. |
AW: Nichtvirtualisierter Ordner auf Win7?
Du, bzw. dein Programm hast im Programmeverzeichnis (Zurecht) keine Schreibrechte mehr, als "normaler" Benutzer.
PS: Das war schon unter XP so, wenn man nur nicht ständig mit vollen Adminrechten arbeiten und so diese Sperren umgehen würde. :zwinker: Das Manifest im XE ist aber nur ein GUI-Manifest, für die neuen Commoncontrols. Der VirtualStore (Kompatibilität mit Win7 und/oder Vista) oder die Benutzerrechte werden damit nicht geregelt. Infos zu Manifesten (vorallem das sogenannte Admin-Manifest) gibt es zu genüge in der DP zu finden. oder unter ![]() Es bleibt aber zu empfehlen, daß du dich an den vordefinierten Temp-Ordner wendest. Im Notfall könnte man sich auch (temporär) ein Unterverzeichnis darin erstellen. |
AW: Nichtvirtualisierter Ordner auf Win7?
Zitat:
Zitat:
Zitat:
Zitat:
Delphi-Quellcode:
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.
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; |
AW: Nichtvirtualisierter Ordner auf Win7?
Zitat:
|
AW: Nichtvirtualisierter Ordner auf Win7?
IIRC lässt sich mit SHGetSpecialFolder aber nicht der TEMP-Ordner ermitteln, da es dafür keine CSIDL gibt. Aber GetTempPath sollte das gewünschte Ergebnis bringen wie oben gezeigt.
|
AW: Nichtvirtualisierter Ordner auf Win7?
Also zunächst mal danke für die Antworten.. Man lernt nie aus :oops:
Wenn ich richtig sehe, ist das einfachste, das Windows-temp-Verzeichnis einzubinden. Das wollte ich ja auch... Zitat:
Und noch eine andere Frage: Ich lasse im Setup auch andere *exe in das App-Verzeichnis installieren, auf das dann das Hauptprogramm via shellexec.. zugreift. Funktioniert der Zugriff dann ohne Admin-Rechte auch nicht mehr?!? :gruebel: Danke und Gruß, frieder |
AW: Nichtvirtualisierter Ordner auf Win7?
Du meinst, ob sich die Programme starten lassen? Das sollte im Normalfall weiterhin möglich sein, solange Du nicht versuchst, in die Exen hineinzuschreiben :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:27 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 by Thomas Breitkreuz