AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Nichtvirtualisierter Ordner auf Win7?
Thema durchsuchen
Ansicht
Themen-Optionen

Nichtvirtualisierter Ordner auf Win7?

Ein Thema von frieder2008 · begonnen am 9. Sep 2011 · letzter Beitrag vom 9. Sep 2011
Antwort Antwort
Seite 1 von 3  1 23      
frieder2008

Registriert seit: 28. Feb 2009
78 Beiträge
 
#1

Nichtvirtualisierter Ordner auf Win7?

  Alt 9. Sep 2011, 10:05
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
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.198 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Nichtvirtualisierter Ordner auf Win7?

  Alt 9. Sep 2011, 10:21
a) wie ich den VirtualStore über mein Programm deaktivieren oder
Dein Programm braucht ein entsprechendes Manifest. Neue Delphi-Versionen fügen diese automatisch hinzu. Für alte Delphi-Versionen muss man diese selbst hinzufügen.

b) für einen virtualstore-unabhängigen, aber systemübergreifenden Ordner?
Wie wäre es mit dem Windows-Temp-Ordner?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
frieder2008

Registriert seit: 28. Feb 2009
78 Beiträge
 
#3

AW: Nichtvirtualisierter Ordner auf Win7?

  Alt 9. Sep 2011, 10:33
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:

http://www.delphipraxis.net/771563-post4.html

- 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:
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));
Woran kann das liegen?

Danke und Gruß,
frieder
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: Nichtvirtualisierter Ordner auf Win7?

  Alt 9. Sep 2011, 10:39
Wie wäre es mit dem Windows-Temp-Ordner?
Da hatte er ja geschrieben dass es nicht funktioniert.

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.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.088 Beiträge
 
Delphi 12 Athens
 
#5

AW: Nichtvirtualisierter Ordner auf Win7?

  Alt 9. Sep 2011, 10:43
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.


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 Hier im Forum suchenManifest-Creator, wo auch ein paar Infos/Hintergründe genannt werden.


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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
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, 10: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
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.198 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Nichtvirtualisierter Ordner auf Win7?

  Alt 9. Sep 2011, 10:57
Wie wäre es mit dem Windows-Temp-Ordner?
Da hatte er ja geschrieben dass es nicht funktioniert.

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.
Ich mein doch den Ordern den Windows dafür vorsieht. Der name SHGetSpecialFolder war mir gerade entfallen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#8

AW: Nichtvirtualisierter Ordner auf Win7?

  Alt 9. Sep 2011, 11:11
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
frieder2008

Registriert seit: 28. Feb 2009
78 Beiträge
 
#9

AW: Nichtvirtualisierter Ordner auf Win7?

  Alt 9. Sep 2011, 11:13
Also zunächst mal danke für die Antworten.. Man lernt nie aus

Wenn ich richtig sehe, ist das einfachste, das Windows-temp-Verzeichnis einzubinden. Das wollte ich ja auch...

Zitat:
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.
Das Windows-Temp-Verzeichnis (via gettemppath) wird korrekt ermittelt. Ich verstehe nicht, warum existdirectory fälschlicherweise "true" zurückgibt?!?

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?!?

Danke und Gruß,
frieder
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#10

AW: Nichtvirtualisierter Ordner auf Win7?

  Alt 9. Sep 2011, 11:15
Du meinst, ob sich die Programme starten lassen? Das sollte im Normalfall weiterhin möglich sein, solange Du nicht versuchst, in die Exen hineinzuschreiben
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:43 Uhr.
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