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 :lol:

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 :D

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.

:roll:

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 ? :oops:

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 :cry:

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 :allright:

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 :D

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