Перенаправление файлов не работает, если я установил CurrentDirectory в C: \ Program Files в 32-разрядном приложении на 64-разрядной версии Win7, не следует ли перейти в папку (x86)? - PullRequest
1 голос
/ 11 октября 2011

Вот мой тестовый код ниже.

//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.

1 Ответ

2 голосов
/ 11 октября 2011

Это довольно просто.Каталог Program Files не подлежит перенаправлению файла .

Возможно, вам лучше всего использовать значения CSIDL_PROGRAM_FILES и CSIDL_PROGRAM_FILESX86 CSIDL , но выВы должны решить для себя, нужны ли вам папки x64 или x86.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...