C # - Как получить программные файлы (x86) в Windows 64 бит - PullRequest
149 голосов
/ 11 октября 2008

Я использую:

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

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

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

Ответы [ 7 ]

228 голосов
/ 11 октября 2008

Функция ниже вернет каталог 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");
}
126 голосов
/ 23 декабря 2010

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

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)
42 голосов
/ 14 декабря 2010
Environment.GetEnvironmentVariable("PROGRAMFILES(X86)") ?? Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)
14 голосов
/ 11 октября 2008

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

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

9 голосов
/ 11 октября 2008

Один из способов - поиск переменной среды «ProgramFiles (x86)»:

String x86folder = Environment.GetEnvironmentVariable("ProgramFiles(x86)");
5 голосов
/ 28 февраля 2011

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

Environment.GetEnvironmentVariable("PROGRAMFILES")
0 голосов
/ 13 июня 2018

Однострочник с использованием нового метода в .NET. Всегда будет возвращать папку Program Files x86.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...