try CSIDL before resorting to registry or API for paths

git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@4867 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
kichik 2007-01-23 19:41:28 +00:00
parent edc2d5b49d
commit 0117e3138e
2 changed files with 30 additions and 32 deletions

View file

@ -314,7 +314,7 @@ CEXEBuild::CEXEBuild() :
m_ShellConstants.add("SMSTARTUP",CSIDL_STARTUP, CSIDL_COMMON_STARTUP); m_ShellConstants.add("SMSTARTUP",CSIDL_STARTUP, CSIDL_COMMON_STARTUP);
m_ShellConstants.add("DESKTOP",CSIDL_DESKTOPDIRECTORY, CSIDL_COMMON_DESKTOPDIRECTORY); m_ShellConstants.add("DESKTOP",CSIDL_DESKTOPDIRECTORY, CSIDL_COMMON_DESKTOPDIRECTORY);
m_ShellConstants.add("STARTMENU",CSIDL_STARTMENU, CSIDL_COMMON_STARTMENU); m_ShellConstants.add("STARTMENU",CSIDL_STARTMENU, CSIDL_COMMON_STARTMENU);
m_ShellConstants.add("QUICKLAUNCH", CSIDL_APPDATA, CSIDL_PRINTERS); m_ShellConstants.add("QUICKLAUNCH", CSIDL_APPDATA, CSIDL_APPDATA);
m_ShellConstants.add("COMMONFILES",CSIDL_PROGRAM_FILES_COMMON, CSIDL_PROGRAM_FILES_COMMON); m_ShellConstants.add("COMMONFILES",CSIDL_PROGRAM_FILES_COMMON, CSIDL_PROGRAM_FILES_COMMON);
m_ShellConstants.add("DOCUMENTS",CSIDL_PERSONAL, CSIDL_COMMON_DOCUMENTS); m_ShellConstants.add("DOCUMENTS",CSIDL_PERSONAL, CSIDL_COMMON_DOCUMENTS);
m_ShellConstants.add("SENDTO",CSIDL_SENDTO, CSIDL_SENDTO); m_ShellConstants.add("SENDTO",CSIDL_SENDTO, CSIDL_SENDTO);

View file

@ -614,45 +614,21 @@ char * NSISCALL GetNSISString(char *outbuf, int strtab)
if (nVarIdx == NS_SHELL_CODE) if (nVarIdx == NS_SHELL_CODE)
{ {
// NOTE 1: the code CSIDL_PRINTERS, is used for QUICKLAUNCH
// NOTE 2: the code CSIDL_BITBUCKET is used for COMMONFILES
// NOTE 3: the code CSIDL_CONTROLS is used for PROGRAMFILES
LPITEMIDLIST idl; LPITEMIDLIST idl;
char *append = 0; char *append = 0;
int x = 0; int x = 2;
*out = 0; // all users' version is CSIDL_APPDATA only for $QUICKLAUNCH
// for normal $APPDATA, it'd be CSIDL_APPDATA_COMMON
if (fldrs[2] == CSIDL_PRINTERS) // QUICKLAUNCH if (fldrs[2] == CSIDL_APPDATA)
{ {
append = "\\Microsoft\\Internet Explorer\\Quick Launch"; append = "\\Microsoft\\Internet Explorer\\Quick Launch";
x = 2;
}
else if (fldrs[0] == CSIDL_PROGRAM_FILES_COMMON)
{
myRegGetStr(HKEY_LOCAL_MACHINE, SYSREGKEY, "CommonFilesDir", out);
}
else if (fldrs[0] == CSIDL_PROGRAM_FILES)
{
myRegGetStr(HKEY_LOCAL_MACHINE, SYSREGKEY, "ProgramFilesDir", out);
if (!*out)
mystrcpy(out, "C:\\Program Files");
}
else if (fldrs[0] == CSIDL_SYSTEM)
{
GetSystemDirectory(out, NSIS_MAX_STRLEN);
}
else if (fldrs[0] == CSIDL_WINDOWS)
{
GetWindowsDirectory(out, NSIS_MAX_STRLEN);
} }
if (!*out) if (g_exec_flags.all_user_var)
{ {
x = 4; x = 4;
if (!g_exec_flags.all_user_var)
x = 2;
} }
while (x--) while (x--)
@ -666,8 +642,30 @@ char * NSISCALL GetNSISString(char *outbuf, int strtab)
break; break;
} }
} }
else *out=0;
*out=0; }
// resort to old registry methods, only when CSIDL failed
if (!*out)
{
if (fldrs[0] == CSIDL_PROGRAM_FILES_COMMON)
{
myRegGetStr(HKEY_LOCAL_MACHINE, SYSREGKEY, "CommonFilesDir", out);
}
else if (fldrs[0] == CSIDL_PROGRAM_FILES)
{
myRegGetStr(HKEY_LOCAL_MACHINE, SYSREGKEY, "ProgramFilesDir", out);
if (!*out)
mystrcpy(out, "C:\\Program Files");
}
else if (fldrs[0] == CSIDL_SYSTEM)
{
GetSystemDirectory(out, NSIS_MAX_STRLEN);
}
else if (fldrs[0] == CSIDL_WINDOWS)
{
GetWindowsDirectory(out, NSIS_MAX_STRLEN);
}
} }
if (*out && append) if (*out && append)