Искать как ProgramFiles, так и ProgramFiles (x86), используя переменные среды в C ++ и C # / VB.NET

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

Пытаюсь запустить стороннюю программу от себя. Я произвел быстрый поиск в Program Files и Program Files (x86) и только что понял, что путь, возвращаемый getenv("ProgramFiles"), на самом деле зависит от того, работаю ли я в x64 или Win32.

Как я могу искать (как в C ++, так и в C # или VB.NET) обе папки Program Files, используя переменные среды, а не жестко заданные имена - поскольку независимо от версии моей программы, запущенной на пользовательском компьютере , у пользователя могла быть установлена ​​другая версия?

Мой код сейчас: на C ++:

fs::path root_directory = fs::path(getenv("ProgramFiles"));
// and then I change to 
root_directory = fs::path(getenv("ProgramFiles(x86)"));

в VB.NET:

System.Environment.GetEnvironmentVariable("ProgramFiles")

Я посмотрел на этот источник: http://msdn.microsoft.com/en-us/library/aa365743

Но если я реализую то, что они говорят, я все время получаю x86 ...


person Thalia    schedule 22.06.2012    source источник


Ответы (2)


Взгляните на эти вопросы о переполнении стека:

person KF2    schedule 22.06.2012
comment
согласно System.Environment.GetFolderPath (System.Environment.SpecialFolder.ProgramFiles) возвращает c: \ Program Files на 64-битной машине, если только код не создан для целевой x86, и в этом случае он возвращает C: \ Program Files (x86) . - person KF2; 22.06.2012
comment
Я попробую в ближайшее время, есть идеи, как это сделать в С ++? - person Thalia; 22.06.2012
comment
Для программных файлов: TCHAR pf [MAX_PATH]; SHGetSpecialFolderPath (0, pf, CSIDL_PROGRAM_FILES, FALSE); - person KF2; 22.06.2012
comment
Эти две строки получат необходимые каталоги: string prog32 = Environment.GetEnvironmentVariable (ProgramFiles); строка prog64 = Environment.GetEnvironmentVariable (ProgramW6432); результаты: C: \ Program Files (x86) и C: \ Program Files - person KF2; 22.06.2012

Вы можете получить его, используя следующее,

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)
person Rajesh Subramanian    schedule 22.06.2012