Shell Folders code now use "current user" if cannot retrieve nothing for "all users"
git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@3298 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
parent
660bbf5e2d
commit
6542144aba
1 changed files with 50 additions and 32 deletions
|
@ -491,48 +491,66 @@ char * NSISCALL GetNSISString(char *outbuf, int strtab)
|
||||||
LPITEMIDLIST idl;
|
LPITEMIDLIST idl;
|
||||||
int qLaunch=0;
|
int qLaunch=0;
|
||||||
int nCreateFlag = CSIDL_FLAG_CREATE;
|
int nCreateFlag = CSIDL_FLAG_CREATE;
|
||||||
|
int nFolderCurUser;
|
||||||
|
|
||||||
nVarIdx = (*(WORD*)in & 0x0FFF)-1; in+=sizeof(WORD); // Read code for current user
|
nFolderCurUser = (*(WORD*)in & 0x0FFF)-1; // Read code for current user
|
||||||
|
in+=sizeof(WORD);
|
||||||
|
nVarIdx = nFolderCurUser;
|
||||||
if ( g_exec_flags.all_user_var )
|
if ( g_exec_flags.all_user_var )
|
||||||
nVarIdx = (*(WORD*)in & 0x0FFF)-1; in+=sizeof(WORD); // Use code for All users instead
|
{
|
||||||
|
nVarIdx = (*(WORD*)in & 0x0FFF)-1; // Use code for All users instead
|
||||||
|
}
|
||||||
|
else
|
||||||
|
nFolderCurUser=-1; // Already using current user
|
||||||
|
|
||||||
|
in+=sizeof(WORD);
|
||||||
|
|
||||||
*out=0;
|
*out=0;
|
||||||
|
|
||||||
while (TRUE)
|
while (TRUE)
|
||||||
{
|
{
|
||||||
switch ( nVarIdx )
|
switch ( nVarIdx )
|
||||||
|
{
|
||||||
|
case CSIDL_BITBUCKET: // COMMONFILES
|
||||||
|
myRegGetStr(HKEY_LOCAL_MACHINE, smwcvesf, "CommonFilesDir", out);
|
||||||
|
break;
|
||||||
|
case CSIDL_CONTROLS: // PROGRAMFILES
|
||||||
|
myRegGetStr(HKEY_LOCAL_MACHINE, smwcvesf, "ProgramFilesDir", out);
|
||||||
|
if (!*out)
|
||||||
|
mystrcpy(out, "C:\\Program Files");
|
||||||
|
break;
|
||||||
|
case CSIDL_DESKTOP: // QUICKLAUNCH
|
||||||
|
nVarIdx = CSIDL_APPDATA;
|
||||||
|
qLaunch = 1;
|
||||||
|
// dont break
|
||||||
|
default:
|
||||||
|
// Get and force path creation
|
||||||
|
if ( !SHGetSpecialFolderLocation(g_hwnd, nVarIdx | nCreateFlag, &idl) )
|
||||||
{
|
{
|
||||||
case CSIDL_BITBUCKET: // COMMONFILES
|
if (my_PIDL2Path(out, idl, 1))
|
||||||
myRegGetStr(HKEY_LOCAL_MACHINE, smwcvesf, "CommonFilesDir", out);
|
{
|
||||||
break;
|
if (qLaunch)
|
||||||
case CSIDL_CONTROLS: // PROGRAMFILES
|
lstrcat(out,"\\Microsoft\\Internet Explorer\\Quick Launch");
|
||||||
myRegGetStr(HKEY_LOCAL_MACHINE, smwcvesf, "ProgramFilesDir", out);
|
}
|
||||||
if (!*out)
|
|
||||||
mystrcpy(out, "C:\\Program Files");
|
|
||||||
break;
|
|
||||||
case CSIDL_DESKTOP: // QUICKLAUNCH
|
|
||||||
nVarIdx |= CSIDL_APPDATA;
|
|
||||||
qLaunch = 1;
|
|
||||||
// dont break
|
|
||||||
default:
|
|
||||||
// Get and force path creation
|
|
||||||
if ( !SHGetSpecialFolderLocation(g_hwnd, nVarIdx | nCreateFlag, &idl) )
|
|
||||||
{
|
|
||||||
if (my_PIDL2Path(out, idl, 1))
|
|
||||||
{
|
|
||||||
if (qLaunch)
|
|
||||||
lstrcat(out,"\\Microsoft\\Internet Explorer\\Quick Launch");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
*out=0;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if ( *out || nCreateFlag == 0 )
|
if ( *out )
|
||||||
break;
|
break; // Found something
|
||||||
|
|
||||||
|
if ( nCreateFlag == 0 )
|
||||||
|
{
|
||||||
|
if ( nFolderCurUser == -1 ) // Already dropped to current user???
|
||||||
|
break;
|
||||||
else
|
else
|
||||||
nCreateFlag = 0; // remove create flag if it fails
|
{
|
||||||
|
nVarIdx = nFolderCurUser; // Drop to current user if fail
|
||||||
|
nFolderCurUser = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
nCreateFlag = 0; // remove create flag if it fails
|
||||||
}
|
}
|
||||||
|
|
||||||
validate_filename(out);
|
validate_filename(out);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue