С# - Как получить программные файлы (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")