Я использую:
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)"?
Ответы:
Функция ниже вернет
Program Files
каталог x86 во всех этих трех конфигурациях Windows:источник
Environment.Is64BitOperatingSystem
илиEnvironment.Is64BitProcess
?Если вы используете .NET 4, существует специальное перечисление папок ProgramFilesX86 :
источник
источник
Обратите внимание, однако, что
ProgramFiles(x86)
переменная среды доступна только в том случае, если ваше приложение работает в 64-битном режиме.Если ваше приложение выполняется 32-разрядным, вы можете просто использовать
ProgramFiles
переменную окружения, значение которой на самом деле будет «Program Files (x86)».источник
Одним из способов будет поиск переменной среды ProgramFiles (x86):
источник
Я пишу приложение, которое может работать как на платформе x86, так и на платформе x64 для Windows 7, и запрашивая приведенную ниже переменную, просто выбирает правильный путь к папке с программными файлами на любой платформе.
источник
Однострочное использование нового метода в .NET. Всегда будет возвращать папку Program Files x86.
Environment.Is64BitOperatingSystem ? Environment.GetEnvironmentVariable("ProgramFiles(x86)") : Environment.GetEnvironmentVariable("ProgramFiles"))
источник
Код C #:
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)
Вывод:
C: \ Program Files (x86)
Примечание:
Мы должны указать компилятору не отдавать предпочтение конкретной платформе сборки.
Причина:
источник