web-dev-qa-db-fra.com

C # - Comment obtenir des fichiers de programme (x86) sous Windows 64 bits

J'utilise:

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

Afin de déterminer si un programme est détecté sur la machine d’un utilisateur (ce n’est pas idéal, mais le programme que je recherche est un bon vieux logiciel 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 correctement. Cependant, sous x64 Windows Vista, le code renvoie le dossier x64 Program Files, alors que l'application est installée dans Program Files x86. Existe-t-il un moyen de renvoyer par programmation le chemin d'accès à Program Files x86 sans câblage "C:\Program Files (x86)"?

146
Leonard H. Martin

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

  • Windows 32 bits
  • Programme 32 bits fonctionnant sous Windows 64 bits
  • Programme 64 bits fonctionnant 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");
}
226
JaredPar

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

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)
124
Nathan
Environment.GetEnvironmentVariable("PROGRAMFILES(X86)") ?? Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)
42
Carl Hörberg

Notez cependant que la variable d'environnement ProgramFiles(x86) n'est disponible que si votre application exécute une version 64 bits.

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

14
chadmyers

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

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

J'écris une application qui peut fonctionner sur les plates-formes x86 et x64 pour Windows 7 et l'interrogation de la variable ci-dessous extrait simplement le chemin de dossier des fichiers du programme approprié sur n'importe quelle plate-forme.

Environment.GetEnvironmentVariable("PROGRAMFILES")
5
Samir