Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Windows Programm Ordner 32 und 64 Bit gleichzeitg ermitteln (https://www.delphipraxis.net/185634-windows-programm-ordner-32-und-64-bit-gleichzeitg-ermitteln.html)

hanvas 26. Jun 2015 08:16

Windows Programm Ordner 32 und 64 Bit gleichzeitg ermitteln
 
Hallo,

ein 32 Bit Programm von mir soll sowohl als "Portable" Version laufen und Einstellungen etc. unterhalb des eigenen Verzeichnisses schreiben, wie auch "normal" im Programordner installiert sein können und dementsprechend seine Konfigurationsdatein in das entsprechende Benutzerverzeichnis ablegen. Ich muss also unterscheiden wo das Programm installiert ist.

Dem einfachen Test ob das Programm Schreibrechte besitzt traue ich aufgrund des "VirtualStores" nicht wirklich, dementsprechend frage ich über "CSIDL_PROGRAM_FILES" den aktuellen Windows Programmordner ab um festzustellen ob ich da drin bin. Das funktioniert eigentlich auch ganz gut -sowohl bei einem 32 Bit Host wie auch bei 64 Bit.

Mein Programm wird aber nicht nur Standalone betrieben sondern unter Umständen von einem anderen von mir geschriebenen 64 Bit Programm über die Komandozeile aufgerufen und mit diesem Programm im gleichen Ordner installiert. Da aber der 64 Bit Programmordner anders ist als der 32 Bit Programmordner und mein 32 Bit Programm mit meiner Methode einen falschen Ordner erfragt schlägt natürlich auch der Vergleich fehl.

Hat jemand eine Idee ?

Bambini 26. Jun 2015 08:56

AW: Windows Programm Ordner 32 und 64 Bit gleichzeitg ermitteln
 
http://stackoverflow.com/questions/1...s-virtualstore

hathor 26. Jun 2015 09:35

AW: Windows Programm Ordner 32 und 64 Bit gleichzeitg ermitteln
 
Nimm CSIDL_COMMON_APPDATA (FOLDERID_ProgramData) für Programm und Daten, das ist für alle überall gleich.
Zitat:
The file system directory that contains application data for all users. A typical path is C:\Documents and Settings\All Users\Application Data. This folder is used for application data that is not user specific. For example, an application can store a spell-check dictionary, a database of clip art, or a log file in the CSIDL_COMMON_APPDATA folder. This information will not roam and is available to anyone using the computer.

hanvas 26. Jun 2015 12:28

AW: Windows Programm Ordner 32 und 64 Bit gleichzeitg ermitteln
 
Zitat:

Zitat von hathor (Beitrag 1306678)
Nimm CSIDL_COMMON_APPDATA (FOLDERID_ProgramData) für Programm und Daten, das ist für alle überall gleich.

Danke, aber genau das löst mein Problem nicht - da ich ja häufig nicht in das gleiche Verzeichnis schreiben will. Aber mit Hinweis von Bamibini (Danke) kann ich mein Problem lösen.

cu und Danke

Ha-Jö

Dalai 26. Jun 2015 12:31

AW: Windows Programm Ordner 32 und 64 Bit gleichzeitg ermitteln
 
Vielleicht denke ich zu einfach: Wie wär's, einfach zu prüfen, ob neben der EXE die Einstellungsdatei liegt und wenn ja, wird die benutzt (portable), und wenn nicht, wird eine Einstellungsdatei irgendwo im %APPDATA% verwendet (Installation). Den Virtual Store kannst du völlig ignorieren, wenn du deiner Anwendung ein ordentliches Manifest verpasst, das Kompatiblität mit den gewünschten Systemen enthält.

MfG Dalai

himitsu 26. Jun 2015 12:40

AW: Windows Programm Ordner 32 und 64 Bit gleichzeitg ermitteln
 
Und wenn es noch gar kein Setting gibt?
Dann ist es lokal, da ja nichts neben der EXE liegt. :stupid:

Wenn dein Programm sich als kompatibel ausgibt (antsprechendes Manifest eingebunden), da schaltet Windows diese Kompatibilitätsfunktionalitäten garicht erst an.

jaenicke 26. Jun 2015 12:54

AW: Windows Programm Ordner 32 und 64 Bit gleichzeitg ermitteln
 
Hier gibt es eine alte Unit von mir, die ich mal für den Zweck geschrieben habe:
http://www.delphipraxis.net/134803-s...-0-rc-3-a.html
Die ist nicht wirklich schön geschrieben aus heutiger Sicht 7 Jahre später, aber die Idee dahinter finde ich auch heute noch sinnvoll. Die habe ich hier beschrieben:
http://www.entwickler-ecke.de/viewto...541637&view=dl

hanvas 26. Jun 2015 16:30

AW: Windows Programm Ordner 32 und 64 Bit gleichzeitg ermitteln
 
Zitat:

Zitat von jaenicke (Beitrag 1306704)
Hier gibt es eine alte Unit von mir, die ich mal für den Zweck geschrieben habe:
http://www.delphipraxis.net/134803-s...-0-rc-3-a.html
...

Auf den ersten Blick sieht es schöner aus als das was ich jetzt mache*. Ich sehe es mir mal genauer an. Danke erstmal.

cu Ha-Jö

* Für den Moment habe ich eine etwas "unschöne" Lösung gefunden :

Ich teste wie schon beschrieben ob das 32 Bit Programm im 32 Bit Programmverzeichnis liegt. In meinem 64 Bit Programm habe ich nun den gleichen Test eingebaut und da ich das 32 Bit Programm über die Komandozeile aufrufe gebe ich das Ergebnis des Tests einfach als zusätzlichen undokumentierten Parameter mit auf dem Weg.

Wobei ich langsam zu glauben beginne es gibt für mein Problem gar keine wirklich schöne Lösung - außer "Himitsus" Manifest zu verwenden (:thumb:) und zu testen ob ich dann noch Schreibrechte habe, wobei ich persönlich das auch nicht wirklich "schön" finde.


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