Estoy usando:
FileInfo(
System.Environment.GetFolderPath(
System.Environment.SpecialFolder.ProgramFiles)
+ @"\MyInstalledApp"
Para determinar si se detecta un programa en la máquina de un usuario (no es lo ideal, pero el programa que estoy buscando es un viejo error de una aplicación de MS-DOS, y no se me ocurrió otro método).
En Windows XP y versiones de 32 bits de Windows Vista, esto funciona bien. Sin embargo, en Windows Vista x64, el código devuelve la carpeta Archivos de programa x64, mientras que la aplicación está instalada en Archivos de programa x86. ¿Hay alguna manera de devolver programáticamente la ruta a Archivos de programa x86 sin cableado duro "C: \ Archivos de programa (x86)"?
Respuestas:
La siguiente función devolverá el
Program Files
directorio x86 en todas estas tres configuraciones de Windows:fuente
Environment.Is64BitOperatingSystem
oEnvironment.Is64BitProcess
?Si está utilizando .NET 4, hay una enumeración especial de carpetas ProgramFilesX86 :
fuente
fuente
Sin embargo,
ProgramFiles(x86)
tenga en cuenta que la variable de entorno solo está disponible si su aplicación está ejecutando 64 bits.Si su aplicación se ejecuta en 32 bits, puede usar la
ProgramFiles
variable de entorno cuyo valor será "Archivos de programa (x86)".fuente
Una forma sería buscar la variable de entorno "Archivos de programa (x86)":
fuente
Estoy escribiendo una aplicación que puede ejecutarse tanto en la plataforma x86 como en la x64 para Windows 7 y, al consultar la variable a continuación, solo se obtiene la ruta correcta de la carpeta de archivos de programa en cualquier plataforma.
fuente
One-liner usando el nuevo método en .NET. Siempre devolverá la carpeta x86 Program Files.
Environment.Is64BitOperatingSystem ? Environment.GetEnvironmentVariable("ProgramFiles(x86)") : Environment.GetEnvironmentVariable("ProgramFiles"))
fuente
Código C #:
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)
Salida:
C: \ Archivos de programa (x86)
Nota:
Necesitamos decirle al compilador que no prefiera una plataforma de compilación particular.
Razón:
fuente