Как программно получить фактический путь к папке "Program Files"?

Возможный дубликат:
C# - Как получить программные файлы (x86) в Windows Vista 64 бит

Я понимаю, что шансы пользователя изменить Windows по умолчанию C:\Program Files довольно тонкий, но странные вещи произошли!

Как я могу получить правильный путь к Program Files из системы?

6 ответов

Решение

.NET предоставляет список " специальных папок" для программных файлов, моих документов и т. Д.

Код для преобразования из перечисления в фактический путь выглядит следующим образом:

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)

http://msdn.microsoft.com/en-us/library/14tx8hby.aspx

Просто чтобы добавить к этому.

Если вы работаете в 32-битном режиме (даже на 64-битной ОС), SpecialFolder.ProgramFiles и%PROGRAMFILES% будут возвращать..Program Files (x86).

Если вам определенно нужно одно и / или другое, вам необходимо проверить следующее:

32- битная система:

SpecialFolder.ProgramFiles =..Программные файлы \

64- битная система в 32- битном процессе:SpecialFolder.ProgramFiles =..Программные файлы (x86)\Environment.GetEnvironmentVariable("ProgramW6432") =..Программные файлы \

64- битная система в 64- битном процессе:SpecialFolder.ProgramFiles =..Программные файлы \Environment.GetEnvironmentVariable("PROGRAMFILES(X86)") =..Программные файлы (x86)\

Очевидно, это зависит от вашего региона и т. Д.

Вы должны использовать GetFolderPath в классе Environment.

try {
    Environment.GetFolderPath( Environment.SpecialFolder.ProgramFiles )
catch( ArgumentException ex ) {
    Console.Out.WriteLine( ex.StackTrace );
}

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) это, вероятно, лучшее решение, но другим возможным вариантом является оценка стоимости ProgramFiles переменная окружения. Для этого вы можете использовать GetEnvironmentVariable или же ExpandEnvironmentVariables метод Environment учебный класс:

Environment.GetEnvironmentVariable("ProgramFiles")

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

получает "программные файлы (x86)" в 64-битной Windows и "программные файлы" в 32-битной.

Вы можете получить доступ к переменной среды с именем: %PROGRAMFILES%

то есть:

%PROGRAMFILES%\Maxis\SimCity

в C#:

System.Environment.SpecialFolder.ProgramFiles
Другие вопросы по тегам