AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi CSDIL_PROGRAM_FILES in 32Bit/64Bit
Thema durchsuchen
Ansicht
Themen-Optionen

CSDIL_PROGRAM_FILES in 32Bit/64Bit

Ein Thema von QuickAndDirty · begonnen am 7. Sep 2012 · letzter Beitrag vom 22. Sep 2012
Antwort Antwort
Seite 1 von 3  1 23      
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.883 Beiträge
 
Delphi 12 Athens
 
#1

CSDIL_PROGRAM_FILES in 32Bit/64Bit

  Alt 7. Sep 2012, 15:47
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:
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;
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?

Was gibt SHGetSpecialFolderLocation für CSIDL_PROGRAM_FILES zurrück wenn man es auf einem 64 Bit Betriebsystem mit einer 32 Bit Anwendung abfragt?
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
DanielProgramming
(Gast)

n/a Beiträge
 
#2

AW: CSDIL_PROGRAM_FILES in 32Bit/64Bit

  Alt 7. Sep 2012, 16:07
C:\Program Files (x86) bei mir (englisches Windows 7 x64, Delphi XE3 Testversion, Zielsystem: Win32)
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.883 Beiträge
 
Delphi 12 Athens
 
#3

AW: CSDIL_PROGRAM_FILES in 32Bit/64Bit

  Alt 7. Sep 2012, 16:28
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.
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
DanielProgramming
(Gast)

n/a Beiträge
 
#4

AW: CSDIL_PROGRAM_FILES in 32Bit/64Bit

  Alt 7. Sep 2012, 16:36
Kommt C:\Program Files raus
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.883 Beiträge
 
Delphi 12 Athens
 
#5

AW: CSDIL_PROGRAM_FILES in 32Bit/64Bit

  Alt 7. Sep 2012, 17:23
Das erklärt dann mein problem!

Danke !
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#6

AW: CSDIL_PROGRAM_FILES in 32Bit/64Bit

  Alt 7. Sep 2012, 19:39
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.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#7

AW: CSDIL_PROGRAM_FILES in 32Bit/64Bit

  Alt 8. Sep 2012, 09:04
"Wer nach Hunden sucht, wird keine Katzen finden."

Die Frage ist falsch gestellt:
Nimm KNOWNFOLDERID:
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
.
http://msdn.microsoft.com/en-us/wind.../gg463051.aspx
.
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)

Geändert von hathor ( 8. Sep 2012 um 09:17 Uhr)
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.883 Beiträge
 
Delphi 12 Athens
 
#8

AW: CSDIL_PROGRAM_FILES in 32Bit/64Bit

  Alt 8. Sep 2012, 10:17
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.
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#9

AW: CSDIL_PROGRAM_FILES in 32Bit/64Bit

  Alt 8. Sep 2012, 10:24
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;
Miniaturansicht angehängter Grafiken
windows-paths.jpg  

Geändert von hathor ( 8. Sep 2012 um 10:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

AW: CSDIL_PROGRAM_FILES in 32Bit/64Bit

  Alt 8. Sep 2012, 11:50
Warum nicht ParamStr(0) oder ist es nicht das eigene Programm?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 21:11 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