c# - sumiu - pasta x86 nao aparece




Como obter arquivos de programa(x86) no Windows 64 bits (5)

Estou a usar:

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

A fim determinar se um programa é detectado em uma máquina dos usuários (não é ideal, mas o programa que eu estou procurando é um kludge velho direito de uma aplicação do MS-DOS, e eu não poderia pensar em um outro método).

No Windows XP e nas versões de 32 bits do Windows Vista, isso funciona bem. No entanto, no x64 Windows Vista, o código retorna a pasta Arquivos de Programas x64, enquanto o aplicativo é instalado em Arquivos de Programas x86. Existe uma maneira de programaticamente retornar o caminho para Arquivos de Programas x86 sem fiação "C: \ Arquivos de Programas (x86)"?


A função abaixo retornará o diretório Program Files x86 em todas essas três configurações do Windows:

  • Janelas de 32 bits
  • Programa de 32 bits em execução no Windows de 64 bits
  • Programa de 64 bits em execução em janelas 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");
}

Estou escrevendo um aplicativo que pode ser executado na plataforma x86 e x64 para o Windows 7 e consultar a variável abaixo apenas puxa o caminho da pasta de arquivos de programa à direita em qualquer plataforma.

Environment.GetEnvironmentVariable("PROGRAMFILES")

One-liner usando o novo método no .NET. Sempre retornará a pasta Arquivos de Programas x86.

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


Se você estiver usando o .NET 4, há uma enumeração de pasta especial ProgramFilesX86 :

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)

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




64bit