C # – Cómo obtener archivos de progtwig (x86) en Windows 64 bit

Estoy usando:

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

Para determinar si un progtwig se detecta en un equipo de usuarios (no es ideal, pero el progtwig que estoy buscando es un viejo error correcto de una aplicación de MS-DOS, y no se me ocurrió 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 progtwig x64, mientras que la aplicación se instala en Archivos de progtwig x86. ¿Hay alguna manera de devolver programáticamente la ruta a Archivos de progtwig x86 sin cableado “C: \ Archivos de progtwig (x86)”?

La siguiente función devolverá el directorio de Program Files x86 en todas estas tres configuraciones de Windows:

  • Windows de 32 bits
  • Progtwig de 32 bits ejecutándose en Windows de 64 bits
  • Progtwig de 64 bits ejecutándose en ventanas 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"); } 

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

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

Sin embargo, tenga en cuenta que la variable de entorno ProgramFiles(x86) solo está disponible si su aplicación se ejecuta en 64 bits.

Si su aplicación se ejecuta en 32 bits, puede usar la variable de entorno ProgramFiles cuyo valor en realidad será “Archivos de progtwig (x86)”.

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

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

Estoy escribiendo una aplicación que puede ejecutarse tanto en la plataforma x86 como en la x64 para Windows 7 y consultar la siguiente variable simplemente tira la ruta correcta de la carpeta de archivos de progtwig en cualquier plataforma.

 Environment.GetEnvironmentVariable("PROGRAMFILES") 

One-liner utilizando el nuevo método en .NET. Siempre devolverá la carpeta Archivos de progtwig x86.

Environment.Is64BitOperatingSystem ? Environment.GetEnvironmentVariable("ProgramFiles(x86)") : Environment.GetEnvironmentVariable("ProgramFiles"))