![]() |
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 :)
|
AW: Nichtvirtualisierter Ordner auf Win7?
Zitat:
|
AW: Nichtvirtualisierter Ordner auf Win7?
Jupp, es fehlen nur die Schreibrechte.
Lesen und Ausführen sollte standardmäßig kein Problem darstellen. Willst du hineinschreiben, brauchst du die nötigen Rechte, welche standardmäßig Administratoren und Backupbenutzer besitzen. Und wie schon erwähnt, werden (selbst in einem Benutzerkonto) alle Programme erstmal standardmäßig, über das UAC, mit eingeschränkten Rechten ausgeführt, es sei denn es liegt ein entsprechendes Manifest vor, oder man startet das Programm manuell mit Adminrechten. Halt Schutzmaßnahmen, damit sich keine Viren/Würmer/Trojaner dort einnisten können. |
AW: Nichtvirtualisierter Ordner auf Win7?
Ok, ich hab den (peinlichen) Fehler gefunden: directoryexists hat nach einem Temp-Verzeichnis gesucht, das ein "\" zuviel hatte.. An anderen Stellen (z.B. beim Speichern einer File) hat das aber keine Probleme gemacht.. Naja, sauberer isses jetzt.
Letzte Frage, um sicher zu gehen (habe gerade keine Möglichkeit, auf anderen Systemen wie Vista etc. zu testen): Auf das Windows-temp-Verzeichnis habe ich IMMER Schreibrechte (auch als nicht-Admin) oder kann mir da unter best. Bedingungen was ähnliches passieren wie bei App-/System-Verzeichnis? Anders gefragt: bezieht sich der Virtualstore NIE auf das Win-Temp-Verzeichnis? Danke Euch für die Mühe und beste Grüße, frieder |
AW: Nichtvirtualisierter Ordner auf Win7?
Ein Admin kann die Rechte auf dem System (beinahe) beliebig vergeben, verlassen darfst Du Dich also nicht auf entsprechende Rechte. Allerdings solltest Du im Normalfall immer Schreibrechte im Temp-Verzeichnis haben, ansonsten dürfte der entsprechende Benutzer auch an anderer Stelle bzw. mit anderer Software Probleme bekommen.
|
AW: Nichtvirtualisierter Ordner auf Win7?
Irgendwie missfällt mir dabei der Begriff "Windows-temp-Verzeichnis". Dieses Verzeichnis gibt es eigentlich nicht mehr. Unter neueren Windows Versionen werden temporäre Dateien spezifisch für den angemeldeten Benutzer gespeichert, das heisst, für jeden Benutzer gibt es ein separates Verzeichnis. Dadurch sollte eigentlich auch sichergestellt sein, dass jeder User auf dieses (sein) Verzeichnis volle Zugriffsrechte hat. Ein Admin, der dieses Verzeichnis sperrt, verdient den Namen Admin m.E. nicht.
|
AW: Nichtvirtualisierter Ordner auf Win7?
Code:
TEMP=C:\Users\ADMINI~.SOF\AppData\Local\Temp\2
|
AW: Nichtvirtualisierter Ordner auf Win7?
Zitat:
Normalerweise gilt bei Windows nach Windows98 für den Tempordner:
Code:
TEMP=%USERPROFILE%\AppData\Local\Temp
|
AW: Nichtvirtualisierter Ordner auf Win7?
Das mag ja sein, in meinem Environment findet sich aber die zitierte "expandierte" Form. Es wird nämlich wegen RDP noch die Session-Nummer angehängt.
|
AW: Nichtvirtualisierter Ordner auf Win7?
Zitat:
Zitat:
|
AW: Nichtvirtualisierter Ordner auf Win7?
Zitat:
|
AW: Nichtvirtualisierter Ordner auf Win7?
Zitat:
|
AW: Nichtvirtualisierter Ordner auf Win7?
Ich denke, der Begriff "Windows-Tempordner" bezog sich lediglich darauf, dass man den für den aktuellen Benutzer gültigen und mit Windows-Bordmitteln zu erfragenden Ordner verwenden soll anstatt einen eigenen irgendwo anzulegen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:52 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-2025 by Thomas Breitkreuz