Вот мой тестовый код ниже.
//This correctly prints C:\Program Files from 64 app on 64 bit Win7 and
//C:\Program Files (x86) 32 bit app on 64 bit Win7
system("echo %PROGRAMFILES%\n");
BOOL ret = SetCurrentDirectory("C:\\Program Files\\");
char szFolder[512] = {0};
GetCurrentDirectory(512, szFolder);
//folder is printed as C:\Program Files from 32 bit app on 64 Win7! Why?
cout << "Current folder now: " << szFolder << endl;
Причиной написания кода является проверка того, что произойдет, если 32-битный InstallShield установит путь к C: \ Program Files. Мы хотим, чтобы путь был установлен в C: \ Program Files в 32-битной ОС и C: \ Program Files (x86) в 64-битной ОС. Я предполагал, что функция перенаправления файловой системы Windows обеспечит это?
По сути, нам нужно найти 32-битную библиотеку, которая будет в папке (x86). Мы надеялись, что установка C: \ Program Files будет перенаправлена правильно, поэтому нам не о чем беспокоиться?
Почему SetCurrentDirectory не перенаправляется? Я тестирую на 64-битной Windows 7. Приложение скомпилировано с использованием MS VSC ++ 2008.