AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Umgebungsvariablen auf Win64 / Programme-Verzeichnis sauber ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

Umgebungsvariablen auf Win64 / Programme-Verzeichnis sauber ermitteln

Ein Thema von Dalai · begonnen am 19. Mär 2012 · letzter Beitrag vom 19. Mär 2012
Antwort Antwort
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#1

Umgebungsvariablen auf Win64 / Programme-Verzeichnis sauber ermitteln

  Alt 19. Mär 2012, 16:02
Hey Leute,

ich habe ein Programm, mit dessen Hilfe verschiedene Anwendungen auf einem System installiert werden können. Die Definitionen dafür befinden sich in je einer INI. Um die ggf. bereits auf dem System befindliche Version einer Anwendung zu ermitteln, gibt man in der INI z.B. dies an:
Code:
[Script]
InstallCheck=%ProgramFiles%\Internet Explorer\iexplore.exe
Wie bekomme ich es hin, dass die Umgebungsvariablen auf einem 64 Bit Windows so aufgelöst werden, wie man das erwartet? Oder anders ausgedrückt: ich möchte auf einem 32 Bit Windows den 32 Bit Pfad herausbekommen und auf einem 64 Bit Windows den 64 Bit Pfad.

Bislang habe ich erfolglos mit den Funktionen Wow64DisableWow64FsRedirection() und Konsorten probiert, aber auch ein SHGetSpecialFolderPath(Self.Handle, buf, CSIDL_PROGRAM_FILES, False) gibt immer
Code:
C:\Program Files (x86)
zurück, so dass ich noch nicht einmal die Umgebungsvariablen manuell korrigieren könnte via SetEnvironmentVariable(). Den Pfad selbst aus der Registry auszulesen, ist ja auch nicht unbedingt die feine und bevorzugte Art...

Hat jemand Ideen?

MfG Dalai

PS: Die Sache beschränkt sich nicht unbedingt nur auf %ProgramFiles%, denn ich weiß ja vorher nicht, welche Umgebungsvariable in der INI angegeben wird.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Umgebungsvariablen auf Win64

  Alt 19. Mär 2012, 16:12
Wenn ich der Wikipedia (hier) glauben darf gibt es zwei Variablen dafür, und mit PROGRAMMFILES solltest Du immer im 64Bit Zweig landen ??

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#3

AW: Umgebungsvariablen auf Win64

  Alt 19. Mär 2012, 17:25
Wenn ich der Wikipedia (hier) glauben darf gibt es zwei Variablen dafür
Das ist mir bekannt. Das nützt mir aber nichts. Die Variable %ProgramFiles% soll je nach Architektur aufgelöst werden. Ich gebe mal ein konkretes Beispiel: ClassicShell gibt es in einem einzigen Paket, das sowohl auf 32 als auch 64 Bit installiert werden kann. Um nun dessen Existenz zu prüfen, gebe ich z.B.
Code:
InstallCheck=%ProgramFiles%\Classic Shell\ClassicStartMenuDLL.dll
an. Nun geht das natürlich auf einem 64 Bit Windows schief, wenn die Variable immer nach "Program Files (x86)" aufgelöst wird, weil es eben in "Program Files" installiert ist.

Zitat:
und mit PROGRAMMFILES solltest Du immer im 64Bit Zweig landen ??
Ist aber nicht so. Deswegen frage ich ja hier. Mit %SystemRoot% klappt das übrigens einwandfrei, wenn ich vorher Wow64DisableWow64FsRedirection() aufrufe.

MfG Dalai
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#4

AW: Umgebungsvariablen auf Win64

  Alt 19. Mär 2012, 19:04
Ich wusste ja schon immer, dass es MS drauf hat . Aber das setzt dem Ganzen die Krone auf:
Zitat von http://msdn.microsoft.com/en-us/library/windows/desktop/dd378457(v=vs.85).aspx:
FOLDERID_ProgramFilesX64

This value is not supported on 32-bit operating systems. It also is not supported for 32-bit applications running on 64-bit operating systems. Attempting to use FOLDERID_ProgramFilesX64 in either situation results in an error.
Das heißt also auf gut deutsch: Noch nicht einmal mit der (neuesten, erst seit Vista verfügbaren) Funktion SHGetKnownFolderPath() könnte ich den echten Pfad ermitteln. Humor ham'se dann auch noch - sofern man das so interpretieren will, denn FOLDERID_ProgramFilesCommonX64 gibt einen ordentlichen Wert zurück mit einer 32 Bit Anwendung auf einem 64 Bit OS, wie man in den Remarks zu MSDN-Library durchsuchenKNOWNFOLDERID lesen kann. Aber FOLDERID_ProgramFilesX64 braucht man ja auch nicht, denn es gibt ja keine Anwendungsfälle für sowas ...

Tja, wenn niemand noch eine (bessere) Idee hat, bleibt mir wohl nichts anderes übrig, als auf die Registry zurückzugreifen, wenn %ProgramFiles% im Wert steht, obwohl man solche Pfade eigentlich nicht via Registry sondern API-Funktion ermitteln soll.

MfG Dalai
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:04 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