Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi forcedirectories + Vista = Problem? (https://www.delphipraxis.net/144513-forcedirectories-vista-%3D-problem.html)

Borschti 9. Dez 2009 15:48


forcedirectories + Vista = Problem?
 
Hallo,

ich habe ein kleines Problem mit der Methode forcedirectories und Vista. Und zwar war ich gestern bei einem Kunden um mein Programm vorzustellen und dieser hatte Vista auf dem Rechner. Bei mir (Wind XP) funktionierte alles wunderbar sprich der Ordner wurde angelegt wenn er nicht vorhanden war. Auf dem Vista Rechner war dies allerdings nicht der Fall. Jetzt habe ich hier leider keinen Vista Rechner zur Hand um das mal genauer unter die Lupe zu nehmen. Ist diesbezüglich irgendetwas bekannt, auch gerne Lösungsvorschläge? Könnte das vielleicht mal jemand auf seinem Vista Rechner für mich testen? Wär echt Super.

VG Alex

Luckie 9. Dez 2009 15:50

Re: forcedirectories + Vista = Problem?
 
Meine Glaskugel sagt mir, dass die nötigen Rechte fehlen die Ordner anzulegen. Wo und mit welchen Rechten sollten denn die Ordner angelegt werden? Und mit welchen Rechten arbeitest du unter XP?

holliesoft 9. Dez 2009 15:57

Re: forcedirectories + Vista = Problem?
 
Das Stichwort dazu wird UAC sein - bzw. "Benutzerkontensteuerung" auf gut Deutsch.

Ab Windows Vista arbeitet auch der Admin standardmäßig mit eingeschränkten Rechten. Wenn eine Anwendung Adminrechte braucht, dann müssen diese beim Start des Programms über ein eingebundenes Manifest angefordert werden.

Grundsätzlich ist es für Anwendungen verpöhnt, im Programmverzeichnis zu schreiben. Für Konfigurationsdaten gibt es andere Speicherorte (Stichwort "Anwendungsdaten").

Wie sieht es denn aus, wenn Du die Programmdatei mit der rechten Maustaste anklickst und "als Administrator ausführen" wählst?
Funktioniert es dann?

Gruß
Patrick

Borschti 9. Dez 2009 16:07

Re: forcedirectories + Vista = Problem?
 
Erstmal danke für die Anworten.

@holliesoft: Also das müsste ich beim Kunden erstmal testen klingt aber plausibel. Allerdings wurde während des Programm Durchlaufs keine Fehlermeldung erzeugt.

Wieso verpöhnt? Also es ist ein Ordner in dem das Programm Logdateien Speichert, wieso sollte ich das nicht im Installationsverzeichnisses des Programms schreiben? Also in einem Unterordner?

Bernhard Geyer 9. Dez 2009 16:26

Re: forcedirectories + Vista = Problem?
 
Zitat:

Zitat von Borschti
Wieso verpöhnt? Also es ist ein Ordner in dem das Programm Logdateien Speichert, wieso sollte ich das nicht im Installationsverzeichnisses des Programms schreiben? Also in einem Unterordner?

Weil du seit Windows NT mit NTFS davon ausgehen musst das der User (bzw. der prozess) keine Schreibrechte im eigenen Installationsverzeichnis hat. Dafür ist das %AppData%-Verzeichnis (Userspezifisch) vorgesehen.

Borschti 10. Dez 2009 08:29

Re: forcedirectories + Vista = Problem?
 
Ok und wo finde ich das Application Data Verzeichnis?

Bernhard Geyer 10. Dez 2009 08:45

Re: forcedirectories + Vista = Problem?
 
Über SHGetFolderPath. Die JCL müsste einen Delphi-Wrapper bereitstellen bzw. neuere Delphi-Versionen haben das schon an Board als Funktion-Definition.

Tyrael Y. 10. Dez 2009 08:46

Re: forcedirectories + Vista = Problem?
 
Hier.
Delphi-Quellcode:
var
  AppDir: String;
begin
 ...
  AppDir := GetSpecialFolder(CSIDL_LOCAL_APPDATA);
...
end;
Hier hast du dazu mehr Info.

SpecialFolder

und hier auch

SpecialFolder

LinuxFan 2. Jan 2010 02:33

Re: forcedirectories + Vista = Problem?
 
Hallo,

unter Windows 7 ist mir das gleiche Problem aufgefallen.

ForceDirectories (unter Admin-Rechten ausgeführt!!) erstellt keinen Ordner! Erschwerend kommt hinzu, dass die Funktion trotz des Fehlverhaltens als Ergebnis TRUE ausgibt.

Christian Seehase 2. Jan 2010 02:44

Re: forcedirectories + Vista = Problem?
 
Moin Victor,

wenn ForceDirectories true zurückliefert, steht zu vermuten, dass der Ordner auch tatsächlich angelegt wurde, nur nicht da, wo Du es erwartet hast.
Vermutlich ist der Schreibzugriff von Windows in ein anderes Verzeichnis umgeleitet worden.

Die Muhkuh 2. Jan 2010 02:45

Re: forcedirectories + Vista = Problem?
 
Wahrscheinlich wird er erstellt, nur virtualisiert. Wo willst den was erstellen?

jaenicke 2. Jan 2010 04:45

Re: forcedirectories + Vista = Problem?
 
Um genau zu sein wird der Ordner, wenn du versucht hast ihn unter c:\program files anzulegen, dort liegen:
C:\Users\AppData\Local\VirtualStore\Program Files\...

Für die automatische Speicherung der Konfigurationsdaten an einem benutzerdefinierten Ort gibt es von mir die Config Utils:
http://www.delphipraxis.net/internal....php?p=1042717
Damit musst du dich nicht darum kümmern wo die liegen, es wird automatisch danach gesucht. Egal ob portabel im eigenen Verzeichnis oder installiert in den Anwendungsdaten, der Benutzer kann es einfach festlegen.

Dafür wird automatisch ein Wizard gestartet, wenn keine Konfigurationsdaten vorhanden sind, den du nur an dein Programm anpassen musst. Du kannst natürlich auch den Wizard entfernen und die Utils mit einem festen Ort, z.B. den Anwendungsdaten des angemeldeten Benutzers, verwenden.

himitsu 2. Jan 2010 10:04

Re: forcedirectories + Vista = Problem?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Man kann die Virtualisierung/Umleitung auch abschalten,
aber da hast du dann ein anderes Problem.

Wenn nicht umgeleitet/virtualisiert wurde, weil das Programm dort keinen Zugriff hatte, dann knallt es natürlich und es wird garnichts gespeichert.
(durch die Virtualisierung wird es zumindestens "irgendwo" gespeicher)


PS: normale Benutzer haben dort schon immer (mindestens seit XP) keine Schreibrechte.
Das ging bisher immer, weil alle standardmäßig als Administrator eingeloggt waren.
Und seit Vosta wird der Standardbenutzer als Benutzer und nicht mehr als Admin angelegt.

Ja und das wird gemacht, damit z.B. böse Programme/Viren in diesen und anderen Verzeichnissen nichts kaputt machen und sich auch dort nicht einnisten können.

Luckie 2. Jan 2010 10:08

Re: forcedirectories + Vista = Problem?
 
Zitat:

Zitat von himitsu
Wenn umgeleitet/virtualisiert wurde, weil das Programm dort keinen Zugriff hatte, dann knallt es natürlich und es wird garnichts gespeichert.
(durch die Virtualisierung wird es zumindestens "irgendwo" gespeicher)

Wobei, es wäre mir lieber, wenn es kracht. Dann weiß ich zumindest sofort, dass was schief läuft und wenn ich eine ordentliche Fehlerbehandlung mache, weiß ich auch warum. Dann hätte ich jetzt nicht das Problem, was hier gerade diskutiert wird.

himitsu 2. Jan 2010 10:20

Re: forcedirectories + Vista = Problem?
 
Wenn man sich als vista-/seventaugliches Programm outet und dieses dem Windows mitteilt, dann wird doch nicht virtualisiert.
Das ganze ist ja nur eine Notfallsicherung, damit "alte" Programme nicht urplötzlich nicht mehr arbeiten, weil sie dort reinschreiben und es nun standardmäßig nicht mehr geht.

commander makatau 2. Jan 2010 11:04

Re: forcedirectories + Vista = Problem?
 
Übrigens werden nur die Daten umgeleitet, die auf %Systemdrive%/Program Files schreiben wollen. Wenn man auf eine zweite Partition schreibt, wird nicht mehr umgeleitet. ;)

himitsu 2. Jan 2010 11:48

Re: forcedirectories + Vista = Problem?
 
Zitat:

Zitat von commander makatau
Übrigens werden nur die Daten umgeleitet, die auf %Systemdrive%/Program Files schreiben wollen. Wenn man auf eine zweite Partition schreibt, wird nicht mehr umgeleitet. ;)

Es gibt da auch noch ein/zwei andere Verzeichniss ... ich glaub %Systemdrive%/Windows war auch mit dabei.

LinuxFan 7. Jan 2010 08:44

Re: forcedirectories + Vista = Problem?
 
Hi,

danke für eure Antworten. Da das Programm als Dienst arbeitet und sowieso SYSTEM-Rechte besitzt, ist mir alles egal.
Habe mir jetzt ne eigene Prozedur geschrieben, die mir die Verzeichnisse am richtigen Fleck erstellt.

Nicht sauber, funktioniert aber ;-)

IngoD7 12. Jan 2010 11:59

Re: forcedirectories + Vista = Problem?
 
Zitat:

Zitat von Bernhard Geyer
[...]bzw. neuere Delphi-Versionen haben das schon an Board als Funktion-Definition.

Haben sie?

Wie heißt denn die Funktion bzw. in welcher Unit ist sie zu finden?

Danke.

DeddyH 12. Jan 2010 12:03

Re: forcedirectories + Vista = Problem?
 
Die Funktion heißt (natürlich) SHGetFolderPath und steht in der Unit SHFolder.

IngoD7 12. Jan 2010 12:34

Re: forcedirectories + Vista = Problem?
 
Zitat:

Zitat von DeddyH
Die Funktion heißt (natürlich) SHGetFolderPath und steht in der Unit SHFolder.

Ach die API - okay. Hatte es zuvor so verstanden, als gäbe es das auch schon als "echte" Delphi-Funktion. (Wieso eigentlich nicht??)

Luckie 12. Jan 2010 12:59

Re: forcedirectories + Vista = Problem?
 
Was ist eine "echte" Delphi Funktion?

IngoD7 12. Jan 2010 13:54

Re: forcedirectories + Vista = Problem?
 
Zitat:

Zitat von Luckie
Was ist eine "echte" Delphi Funktion?

:?:
Eine Funktion, die ohne Handles und Pointer und sowas auskommt. Eben "delphi-näher".

Luckie 12. Jan 2010 14:05

Re: forcedirectories + Vista = Problem?
 
Komisches Kriterium. Aber gut, wenn du meinst. Aber davon abgesehen ist es eben eine Betriebssystem Funktion.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:54 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