2008-10-11 11 views
140

que estoy usando:C# - ¿Cómo obtener Archivos de programa (x86) en Windows de 64 bits

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

Con el fin de determinar si se detecta un programa en una máquina de los usuarios (que no es lo ideal, pero el programa Lo que busco es un derecho viejo kludge de una aplicación de MS-DOS, y no podía pensar en otro método).

En Windows XP y las versiones de 32 bits de Windows Vista esto funciona bien. Sin embargo, en x64 Windows Vista, el código devuelve la carpeta Archivos de programa x64, mientras que la aplicación se instala en Archivos de programa x86. ¿Hay alguna manera de devolver programáticamente la ruta a Archivos de programa x86 sin cableado "C: \ Archivos de programa (x86)"?

+8

Vale la pena señalar que esto devuelve los "archivos de programa" solo en la aplicación de 64 bits en el sistema operativo de 64 bits. Si compila su aplicación específicamente como x86, entonces devolverá "Archivos de programa (x86)" en el sistema operativo de 64 bits utilizando este código. – VitalyB

Respuesta

215

Ésta función devolverá el directorio x 86 Program Files en todas estas tres configuraciones de Windows:

  • 32 bits de Windows programa de bits
  • 32 que se ejecuta en Windows de 64 bits
  • programa de 64 bits que se ejecutan en 64 ventanas bits

 

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

    return Environment.GetEnvironmentVariable("ProgramFiles"); 
} 
+1

¿Alguien puede comentar si esto funciona en un entorno localizado? Gracias de antemano ... – Tom

+2

@Tom funciona en un pt-BR Win 7 Ultimate x64 –

+0

¿Por qué esta prueba: 8 == IntPtr.Size? – Florian

9

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

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

Tenga en cuenta, sin embargo, que la variable de entorno ProgramFiles(x86) sólo está disponible si se ejecuta la aplicación de 64 bits.

Si su aplicación está ejecutándose en 32 bits, puede usar la variable de entorno ProgramFiles cuyo valor en realidad será "Archivos de programa (x86)".

+0

Cierto. Sin embargo, es obvio que su aplicación * * se está ejecutando como de 32 bits, de lo contrario, GetFolderPath() ya devolvería la carpeta x86 correcta de todos modos. – tomasr

+0

¡Muy útil! ¡esto me ahorró horas de trabajo! y salvó a las personas de tener que usar mi código. ¡Es genial cuando las cosas funcionan de la caja! –

41
Environment.GetEnvironmentVariable("PROGRAMFILES(X86)") ?? Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) 
113

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

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86) 
+1

¿Cómo se comporta esto en un sistema operativo de 32 bits? ¿Devuelve "c: \ Archivos de programa" sin x86? –

+5

Sí. Devolverá los archivos de programa c: \ en los archivos x86 y c: \ program (x86) en Windows de 64 bits. – Nathan

+2

Pruébelo usted mismo: en Server 2003 32 bit, esto devuelve una cadena vacía para mí: Console.WriteLine ("X86:" + System.Environment.GetFolderPath (System.Environment.SpecialFolder.ProgramFilesX86)); –

4

Estoy escribiendo una aplicación que puede funcionar tanto con la plataforma x86 y x64 para Windows 7 y   consultar la variable a continuación simplemente tira de la ruta de la carpeta de archivos de programa correcta en cualquier plataforma.

Environment.GetEnvironmentVariable("PROGRAMFILES") 
+0

Realmente, esto también debe marcarse como una respuesta aceptable. Esto es mucho mejor que realizar pruebas lógicas. Sin embargo, devolverá la carpeta apropiada para el tipo de bit compilado de la aplicación. Es decir, si compiló la aplicación en 32 bits, devolverá "Archivos de programa" en un sistema operativo de 32 bits y "Archivos de programa (x86)" en un sistema operativo de 64 bits. ¡PERFECTO! – DiscipleMichael

+0

Tenga cuidado: la pregunta es "Cómo obtener archivos de programa (x86) en Windows 64 bit" y no "Cómo obtener la carpeta de archivo de programa correcta de la aplicación en ejecución". Entonces, esta respuesta, que es correcta en términos de funcionalidad, no es una respuesta relevante a la pregunta. – tedebus

Cuestiones relacionadas