Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Echten Pfadnamen unter Vista ermitteln... (https://www.delphipraxis.net/91837-echten-pfadnamen-unter-vista-ermitteln.html)

Hepdepaddel 10. Mai 2007 16:28


Echten Pfadnamen unter Vista ermitteln...
 
Hi,

bisher habe ich mit ExtractFilePath(Application.ExeName) den Pfadnamen ermittelt, in dem meine EXE liegt. So konnte ich andere Dateien im gleichen Pfad lesen.

Seit Vista liefert mir das aber "c:\programme" obwohl die Dateien in "c:\program files" liegen - keine Ahnung, wer sich das ausgedacht hat, jedenfalls habe ich jetzt im Explorer zwei Ordner c:\programme... sehr nett. Das dumme ist nun, dass meine Anwendung unter "c:\programme\..." sucht, beispielsweise um Berichtsdateien etc. zu öffnen.

Wie bekomme ich den "echten Pfad" und kann man die Anzeige im Explorer irgendwie so abschalten, dass man wieder weiß, wo man gerade wirklich ist?

Viele Grüße

Hepdepaddel

xaromz 10. Mai 2007 16:33

Re: Echten Pfadnamen unter Vista ermitteln...
 
Hallo,
Zitat:

Zitat von Hepdepaddel
Wie bekomme ich den "echten Pfad" und kann man die Anzeige im Explorer irgendwie so abschalten, dass man wieder weiß, wo man gerade wirklich ist?

den echten Pfad siehst Du im Explorer, wenn Du in die Adressleiste klickst.
Innerhalb eines Programmes kannst Du den tatsächlichen Pfad IMHO nur dann feststellen, wenn Deine Anwendung Vista-kompatibel ist, sprich ein Vista-Manifest hat. Ob das allerdings mit den klassischen Befehlen geht, weiß ich nicht. Das ist aber auch egal, da ja C:\Programme nur eine Illusion ist, die Vista aufbaut. Es gibt tatsächlich keinen Ordner dieses Namens. Die Frage ist: wozu willst Du den tatsächlichen Pfad wissen?

Gruß
xaromz

Hepdepaddel 10. Mai 2007 19:15

Re: Echten Pfadnamen unter Vista ermitteln...
 
Die Anwendung wurde in c:\program files\myapp installiert. Sie versucht nun aber, Daten aus c:\programme\myapp zu lesen. Das klappt nicht. Im Explorer finde ich den Ordner c:\programme gleich zweimal untereinander stehend - in einem gibt es "myapp", in dem anderen nicht. Um die Daten auslesen zu können, müsste ich an der richtigen Stelle suchen können :gruebel:

Gruß

Hepdepaddel

Semmel 10. Mai 2007 20:12

Re: Echten Pfadnamen unter Vista ermitteln...
 
die 2 Pfade c:\programme ergeben sich durch das Update 1 Pfad ist der neue Pfad (c:\program files wird von Vista auf c:\programme durch die Sprache vorgespielt)
neue Programme werden in diesen Pfad gespeichert, mann sollte jedoch wegen den Rechten sowieso einen anderen Pfad wählen
2 Pfad ist der alte

karlkoch 17. Mai 2007 00:19

Re: Echten Pfadnamen unter Vista ermitteln...
 
Bei mir gibt ExtractFilePath(Application.Exename) immer den echten Pfadnamen zurück, unter Vista ist das c:\program files.
Es ist in Vista eher umgedreht der Fall, das immer nur die echten Pfade zurückgegeben werden, und die Anwendung selber diesen Pfad "lokalisieren" muss (das was der Explorer macht). Das sieht man an all den Programmen die alte Setup-Routinen verwenden, dort ist der Standardpfad im deutschen Vista auch "program files".

karlkoch

Hepdepaddel 21. Mai 2007 09:21

Re: Echten Pfadnamen unter Vista ermitteln...
 
Sorry für die späte Antwort, ich musste noch in den Urlaub :wink:

Tatsächlich ist die Rückgabe OK, das habe ich nun noch mit ein paar Debug-Ausgaben getestet. Leider stehen noch falsche Daten in den INI-Files. Die Installation ist grundsätzlich "Vista-fähig", aber bislang habe ich erste Datendateien im Programmverzeichnis angelegt, der Anwender konnte dann beim ersten Programmstart (oder auch später) ein Verzeichnis für die Daten wählen. Nunmehr muss ich das Datenverzeichnis eben gleich bei der Installation abfragen.

Dennoch: Dem Vista-Explorer kann ich den wirklichen Pfadnamen ums Verrecken nicht entlocken... auch nicht mit "Herkömmliche Ordner" und "Vollständigen Pfadnamen anzeigen"... da stehen immer die gefakten Namen, mit dem Erfolg, dass die Verwirrung bei zweimal c:\programme oft groß ist...

Gruß

Hepdepaddel

FunkyT 26. Okt 2007 10:46

Re: Echten Pfadnamen unter Vista ermitteln...
 
Zitat:

Zitat von karlkoch
Bei mir gibt ExtractFilePath(Application.Exename) immer den echten Pfadnamen zurück, unter Vista ist das c:\program files.
Es ist in Vista eher umgedreht der Fall, das immer nur die echten Pfade zurückgegeben werden, und die Anwendung selber diesen Pfad "lokalisieren" muss (das was der Explorer macht). Das sieht man an all den Programmen die alte Setup-Routinen verwenden, dort ist der Standardpfad im deutschen Vista auch "program files".

Ich habe unter VISTA Probleme mit dem echten Pfadnamen bzw. dem Link darauf:
Die Funktion Application.Exename liefert bei direktem Aufruf meiner Test.Exe 'c:\program files\myApp\Test.Exe'. Bei Aufruf der Exe mittels eines weiteren Programms über DDE wird ebenfalls dieser korrekte Pfad geliefert, falls im aufrufenden Programm der Pfad der "DDE.ServiceApplication" auf 'C:\program files\myApp\Test.Exe' zeigt.
Soweit ist das alles wunderbar.

Ist im aufrufenden Program jedoch der Pfad der "DDE.ServiceApplication" auf den lokalisierten (Link-)Pfad 'C:\PROGRAMME\myApp\Test.Exe' gesetzt, so liefert Application.Exename der aufgerufenen Test.Exe den lokalisierten (Link-)Pfad 'C:\PROGRAMME\myApp\Test.Exe' zurück.

Es ist kein Unterschied, ob ich Application.ExeName oder ParamStr (0) verwende.
Dieses nette Verhalten bereitet mir einige Kopfschmerzen...

Ich habe schon diverse Foren durchsucht, aber keine Funktion gefunden, welche diese lokalisierten Links in reale Pfade (oder umgekehrt) konvertiert. Die Api-Funktion SHGetLocalizedName ist z.B. auf Pfade nicht anwendbar.
Kenn jemand eine Lösungsmöglichkeit für dieses Problem ?

1000nd Dank schonmal !


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