![]() |
CSDIL_PROGRAM_FILES in 32Bit/64Bit
Hallo ich muss aus einem 32 Bit Programm heraus ermitteln
ob ein ein angeebener Pfad dem Programme Verzeichnis entspricht bzw. darin liegt. Das muss auch funktionieren wenn das Programm auf einem 64Bit Betriebsystem läuft. Ich mache das wie folgt:
Delphi-Quellcode:
Ich bin mir nicht ganz sicher, kann es hier auch nicht testen, aber kann es sein das dieser Code auf einem 64Bit Betriebssystem nicht funktioniert?
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Registry, ActiveX, ComObj, ShlObj; Function CheckForProgramFilesPath(aPath:String):Boolean; var Ppath:String; hPath: PChar; pIdl: PItemIDList Begin aPath := ExpandUNCFileName(aPath); PPath := ''; if SUCCEEDED(SHGetSpecialFolderLocation(0, CSIDL_PROGRAM_FILES, pidl)) then begin hPath := StrAlloc(MAX_PATH); SHGetPathFromIDList(pIdl, hPath); PPath := hPath; StrDispose(hPath); end; FreePIDL(pIdl); Result := Ansipos(PPath, aPath) = 1; End; Was gibt SHGetSpecialFolderLocation für CSIDL_PROGRAM_FILES zurrück wenn man es auf einem 64 Bit Betriebsystem mit einer 32 Bit Anwendung abfragt? |
AW: CSDIL_PROGRAM_FILES in 32Bit/64Bit
C:\Program Files (x86) bei mir (englisches Windows 7 x64, Delphi XE3 Testversion, Zielsystem: Win32)
|
AW: CSDIL_PROGRAM_FILES in 32Bit/64Bit
Uff.
Das könnte erklären warum das schief geht. Kannst du auch ExpandUNCFileName('C:\Program Files') testen? Wenn das etwas anderes liefert als das Kompatibilitäts Verzeichnis habe ich ein Problem. |
AW: CSDIL_PROGRAM_FILES in 32Bit/64Bit
Kommt C:\Program Files raus
|
AW: CSDIL_PROGRAM_FILES in 32Bit/64Bit
Das erklärt dann mein problem!
Danke ! |
AW: CSDIL_PROGRAM_FILES in 32Bit/64Bit
Auf einem Windows 64Bit wird CSIDL_PROGRAM_FILES bei einem 32Bit-Programm C:\Program Files (x86) und ein 64Bit-Programm C:\Program Files als Ergebnis liefern.
|
AW: CSDIL_PROGRAM_FILES in 32Bit/64Bit
"Wer nach Hunden sucht, wird keine Katzen finden."
Die Frage ist falsch gestellt: Nimm KNOWNFOLDERID: ![]() . ![]() . FOLDERID_ProgramFiles GUID: {905e63b6-c1bf-494e-b29c-65b732d3d21a} Display Name: Program Files Folder Type: FIXED Default Path: %ProgramFiles% (%SystemDrive%\Program Files) CSIDL Equivalent: CSIDL_PROGRAM_FILES Legacy Display Name: Program Files Legacy Default Path: %ProgramFiles% (%SystemDrive%\Program Files) |
AW: CSDIL_PROGRAM_FILES in 32Bit/64Bit
Und wie bekomme ich damit Raus ob z.B.
'c:\Programski Fileski\MYProgramm' ein Ort in einem SpecialFolder ist? Ich muss verhindern das ein Setup etwas in das "Programme" Verzeichnis installiert, Weil unsere Anwendung dafür noch nicht ausgelegt ist. |
AW: CSDIL_PROGRAM_FILES in 32Bit/64Bit
Liste der Anhänge anzeigen (Anzahl: 1)
Das ist doch in den Links oben genau beschrieben:
Mit einem 32Bit-Programm bekommst Du auch NUR den 32Bit-Ordner! Siehe Anhang... Ich würde von den WINDOWS-Programm-Pfaden "die Finger lassen". Alternative - da ist es gleich, ob 32Bit oder 64Bit:
Delphi-Quellcode:
function SpecialDirectory(const iID: Integer): string;
var aPath : array[0..MAX_PATH] of Char; pilTemp: PItemIDList; begin try if SHGetSpecialFolderLocation(0, iID, pilTemp)=S_OK then begin if SHGetPathFromIDList(pilTemp, aPath) then begin Result := string(aPath); end else Result := ''; CoTaskMemFree(pilTemp); end else Result := ''; except Result := ''; end; end; function GetConfigPath: String; var AppDir: String; begin AppDir := SpecialDirectory(CSIDL_APPDATA)+'\DEIN PROGRAMM-NAME'; //DEIN PROGRAMM-NAME if DirectoryExists(AppDir) = false then mkdir(AppDir); result := AppDir+'\'; end; |
AW: CSDIL_PROGRAM_FILES in 32Bit/64Bit
Warum nicht ParamStr(0) oder ist es nicht das eigene Programm?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz