С# - Как получить программные файлы (x86) на Windows 64 бит

Я использую:

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

Чтобы определить, обнаружена ли программа на компьютере пользователя (она не идеальна, но программа, которую я ищу, является правильным старым kludge приложения MS-DOS, и я не мог думать о другом методе).

В Windows XP и 32-разрядных версиях Windows Vista это прекрасно работает. Однако в x64 Windows Vista код возвращает папку программных файлов x64, тогда как приложение устанавливается в Program Files x86. Есть ли способ программно вернуть путь к программным файлам x86 без жесткой проводки? C:\Program Files (x86) "?

Ответ 1

Функция ниже вернет каталог x86 Program Files во всех этих трех конфигурациях Windows:

  • 32-разрядная версия Windows
  • 32-разрядная программа, работающая на 64-битной Windows
  • 64-разрядная программа, работающая на 64-битных окнах

 

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

    return Environment.GetEnvironmentVariable("ProgramFiles");
}

Ответ 2

Если вы используете .NET 4, существует специальное перечисление папки ProgramFilesX86:

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)

Ответ 3

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

Ответ 4

Обратите внимание, однако, что переменная среды ProgramFiles(x86) доступна только в том случае, если ваше приложение работает под 64-разрядным.

Если ваше приложение работает с 32-разрядным, вы можете просто использовать переменную среды ProgramFiles, значение которой будет фактически "Program Files (x86)".

Ответ 5

Один из способов - искать переменную среды "ProgramFiles (x86)":

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

Ответ 6

Я пишу приложение, которое может работать как на платформе x86, так и на платформе x64 для Windows 7 и запрашивать приведенную ниже переменную, просто вытаскивает правильный путь к папке файлов программ на любой платформе.

Environment.GetEnvironmentVariable("PROGRAMFILES")