118 votos

C# - Cómo obtener archivos de programa (x 86) en Windows Vista 64 bits

Estoy usando:

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

Con el fin de determinar si un programa es detectado en la máquina de un usuario (no es lo ideal, pero el programa que estoy buscando es un derecho viejo implementación de una aplicación de MS-DOS, y yo no podía pensar en otro método).

En Windows XP y versiones de 32 bits de Windows Vista esto funciona bien. Sin embargo, en x64 de Windows Vista, el código devuelve el x64 carpeta de Archivos de Programa, mientras que la aplicación se instala en Archivos de Programa x86. Hay un camino a través de programación devolver la ruta de acceso a Archivos de Programa x86 sin cableado "C:\Program Files (x86)"?

189voto

JaredPar Puntos 333733

La siguiente función devolverá la x 86 Program Files Directorio en todas estas tres configuraciones de Windows:

  • Windows de 32 bits
  • Programa de 32 bits en Windows de 64 bits
  • Programa de 64 bits en windows de 64 bits

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

        return Environment.GetEnvironmentVariable("ProgramFiles");
    }

85voto

Nathan Puntos 715

Si estás usando .NET 4, hay una enumeración de carpeta especial ProgramFilesX86:

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)

33voto

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

11voto

chadmyers Puntos 3010

Sin embargo, que el ProgramFiles(x86) la variable de entorno sólo está disponible si se ejecuta su aplicación de 64 bits.

Si la aplicación se está ejecutando 32 bits, sólo puede utilizar el ProgramFiles la variable de entorno cuyo valor será realmente "Program Files (x 86)".

8voto

tomasr Puntos 9990

Una forma sería buscar la variable de entorno "ProgramFiles(x86)":

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

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X