Here is my test code below.
//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: " <<开发者_如何学Python szFolder << endl;
Reason for writing code is to test what would happen if 32 bit InstallShield set path to C:\Program Files. We want the path to be set to C:\Program Files on 32 bit OS and C:\Program Files (x86) on 64 bit OS. I assumed that the Windows File System Redirection feature would ensure this happened?
Basically, we have to locate a 32 bit library which will be in (x86) folder. We were hoping that setting to C:\Program Files would be redirected correctly so we don't have to worry about it?
Why is SetCurrentDirectory not being redirected? I am testing on 64 bit Windows 7. Application is compiled using MS VSC++ 2008.
This is quite simple. The Program Files
directory is not subject to file redirection.
You probably would be best using the CSIDL_PROGRAM_FILES
and CSIDL_PROGRAM_FILESX86
CSIDL values but you'll have to work out for yourself whether you need the x64 or x86 folders.
精彩评论