153 votes

C # - Comment obtenir des fichiers programme (x86) sur Windows Vista 64 bits

Je suis l'aide de:

FileInfo(
    System.Environment.GetFolderPath(
        System.Environment.SpecialFolder.ProgramFiles) 
    + @"\MyInstalledApp"

Afin de déterminer si un programme est détecté sur un des utilisateurs de la machine (c'est pas l'idéal, mais le programme que je suis à la recherche d'un droit ancien bidouille d'une application MS-DOS, et je ne pouvais pas penser à une autre méthode).

Sur Windows XP et les versions 32 bits de Windows Vista cela fonctionne bien. Cependant, sur x64 Windows Vista, le code renvoie le x64 dossier Program Files, alors que l'application est installé dans Program Files x86. Est-il un moyen de retour en programmant le chemin vers Program Files x86 sans câblage "C:\Program Files (x86)"?

233voto

JaredPar Points 333733

La fonction ci-dessous renvoie le répertoire x86 Program Files dans toutes ces trois configurations Windows:

  • Windows 32 bits
  • Programme 32 bits s'exécutant sur Windows 64 bits
  • Programme 64 bits s'exécutant sur des fenêtres 64 bits

     static string ProgramFilesx86()
    {
        if( 8 == IntPtr.Size 
            || (!String.IsNullOrEmpty(Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432"))))
        {
            return Environment.GetEnvironmentVariable("ProgramFiles(x86)");
        }

        return Environment.GetEnvironmentVariable("ProgramFiles");
    }
 

143voto

Nathan Points 715

Si vous utilisez .NET 4, il existe une énumération de dossier spéciale ProgramFilesX86 :

 Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)
 

42voto

Carl Hörberg Points 2786
Environment.GetEnvironmentVariable("PROGRAMFILES(X86)") ?? Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)

14voto

chadmyers Points 3010

Notez toutefois que la variable d'environnement ProgramFiles(x86) est uniquement disponible si votre application exécute 64 bits.

Si votre application exécute 32 bits, vous pouvez simplement utiliser la variable d'environnement ProgramFiles dont la valeur sera en réalité "Program Files (x86)".

9voto

tomasr Points 9990

Une solution consisterait à rechercher la variable d’environnement "ProgramFiles (x86)":

 String x86folder = Environment.GetEnvironmentVariable("ProgramFiles(x86)");
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X