Seite 1 von 1
Pfad zu Program (Ordner) herausfinden
Verfasst: 15.01.2009 15:50
von X360 Andy
Nein das is nicht die Frage die schon 100 mal beantwortet ist
Ich möchte DEN pfad herausfinden wo alle Programme des Computers sind.
In meinem Fall "C:\Program Files" , es gibt doch bestimmt sowas wie
GetHomeDirectory() oder GetTemporaryDirectory() oder ?
Suche und Hilfe von PB hab ich benutzt = 0
Sogar Api´s durchsucht
Mfg
Verfasst: 15.01.2009 16:07
von Xaby
Das Problem wird sein, dass man zu mindest bei den WindowsVersionen vor
Windows Vista ja die Ordner selbst definieren konnte.
Bei Windows XP ist es in der deutschen Version ein anderer Ordner als
in der amerikanischen.
Und dann kommt noch dazu, dass man ja in den meisten Programmen
den Installationsordner selbst definieren kann.
Ansonsten mal hier schauen
http://msdn.microsoft.com/de-de/library/bb979138.aspx
Verfasst: 15.01.2009 16:12
von X360 Andy
Und wie machen das dann die Setup-Installer ?
Da wurden ja auch welche in PB geschrieben ... dort wird auch automatisch MEIN Pfad gefunden...
Muss mir die Seite mal durchlesen ... thx
EDIT
CSIDL_PROGRAM_FILES = &H26& ' C:\Programme
müsste es sein oder ?
und wie setzte ich das jetzt richtig in PB um ?

Verfasst: 15.01.2009 16:19
von Xaby
Am besten mal Kontakt mit den Machern vom EasySetup aufnehmen.
Glaube so hieß der Installer von PureBasic.
Bei Vista heißt das Ding wohl immer "Program Files"
Du könntest also auch überprüfen, ob ein "Programme" Ordner existeriert
und oder ein "Program Files" Ordner. Würde zu mindest für den englisch sprachigen Raum und für den deutschsprachigen Raum funktionieren.
Und je nach dem, wo die meisten Programme installiert sind,
das schlägste dann als Installationsordner vor.
Ist natürlich nicht die ideale Lösung

Verfasst: 15.01.2009 16:38
von Bisonte
auch auf die gefahr hin TS-Soft zu wiederholen
Code: Alles auswählen
Procedure.s File_GetSpecialFolder(CSIDL)
Protected *itemid.ITEMIDLIST
Protected location.s = Space(#MAX_PATH)
If SHGetSpecialFolderLocation_ (0, CSIDL, @*itemid) = #NOERROR
If SHGetPathFromIDList_(*itemid, @location)
CoTaskMemFree_(*itemid)
If Right(location, 1) <> "\" : location + "\" : EndIf
ProcedureReturn location
EndIf
EndIf
endprocedure
Debug File_GetSpecialFolder(#CSIDL_PROGRAM_FILES)
Verfasst: 15.01.2009 16:46
von X360 Andy
Danke an euch beiden

Verfasst: 15.01.2009 17:14
von Bisonte
X360 Andy hat geschrieben:
EDIT
CSIDL_PROGRAM_FILES = &H26& ' C:\Programme
müsste es sein oder ?
Naja Du hattest es ja schon fast

Verfasst: 15.01.2009 18:02
von Kaeru Gaman
.... ich würde ja erst mal in die Liste der Umgebungsvariablen schauen...
ebenso wie es %SYSTEM% gibt, gibt es garantiert auch %PROGRAMS% oder so ähnlich.
diese Variable enthält dann zuverlässig den PATH$,
auch wenn das ding "D:\Hoita Programma" heißt...
Verfasst: 15.01.2009 19:28
von ts-soft
Kaeru Gaman hat geschrieben:.... ich würde ja erst mal in die Liste der Umgebungsvariablen schauen...
ebenso wie es %SYSTEM% gibt, gibt es garantiert auch %PROGRAMS% oder so ähnlich.
diese Variable enthält dann zuverlässig den PATH$,
auch wenn das ding "D:\Hoita Programma" heißt...
So eine Umgebungsvariable gibt es nicht. Die API ist auch zuverlässiger,
solange Pfade abgefragt werden, die auch unterstützt werden, abhängig
vom IE und Winversion.
Für Win-, Sys- und Tempdir sollte man es nicht nehmen, sondern die
spezielle API