C# - Как получить программные файлы (x86) в Windows 64 бит
Я использую:
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. Есть ли способ программно вернуть путь к Program Files x86 без жесткого подключения "C:\Program Files (x86)"?
7 ответов
Функция ниже вернет 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");
}
Если вы используете.NET 4, существует специальное перечисление папок ProgramFilesX86:
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)
Environment.GetEnvironmentVariable("PROGRAMFILES(X86)") ?? Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)
Обратите внимание, однако, что ProgramFiles(x86)
Переменная окружения доступна только в том случае, если ваше приложение работает в 64-битном режиме.
Если ваше приложение работает 32-битным, вы можете просто использовать ProgramFiles
переменная окружения, значением которой на самом деле будет "Program Files (x86)".
Одним из способов будет поиск переменной среды ProgramFiles(x86):
String x86folder = Environment.GetEnvironmentVariable("ProgramFiles(x86)");
Я пишу приложение, которое может работать как на платформе x86, так и на платформе x64 для Windows 7, и запрашивая приведенную ниже переменную, просто выбирает правильный путь к папке с программными файлами на любой платформе.
Environment.GetEnvironmentVariable("PROGRAMFILES")
Однострочное использование нового метода в.NET. Всегда будет возвращать папку Program Files x86.
Environment.Is64BitOperatingSystem ? Environment.GetEnvironmentVariable("ProgramFiles(x86)") : Environment.GetEnvironmentVariable("ProgramFiles"))
Код C#:
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)
Выход:
C:\Program Files (x86)
Заметка:
Нам нужно указать компилятору не отдавать предпочтение конкретной платформе сборки.
Go to Visual Studio > Project Properties > Build > Uncheck "Prefer 32 bit"
Причина:
По умолчанию для большинства проектов.NET выбрано "Любой 32-разрядный процессор".
При снятии флажка 32-битная сборка:
JIT в 32-битный код в 32-битном процессе
JIT в 32-битный код в 64-битном процессе