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:
parent
edc2d5b49d
commit
0117e3138e
2 changed files with 30 additions and 32 deletions
|
@ -314,7 +314,7 @@ CEXEBuild::CEXEBuild() :
|
|||
m_ShellConstants.add("SMSTARTUP",CSIDL_STARTUP, CSIDL_COMMON_STARTUP);
|
||||
m_ShellConstants.add("DESKTOP",CSIDL_DESKTOPDIRECTORY, CSIDL_COMMON_DESKTOPDIRECTORY);
|
||||
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("DOCUMENTS",CSIDL_PERSONAL, CSIDL_COMMON_DOCUMENTS);
|
||||
m_ShellConstants.add("SENDTO",CSIDL_SENDTO, CSIDL_SENDTO);
|
||||
|
|
|
@ -614,45 +614,21 @@ char * NSISCALL GetNSISString(char *outbuf, int strtab)
|
|||
|
||||
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;
|
||||
char *append = 0;
|
||||
|
||||
int x = 0;
|
||||
int x = 2;
|
||||
|
||||
*out = 0;
|
||||
|
||||
if (fldrs[2] == CSIDL_PRINTERS) // QUICKLAUNCH
|
||||
// all users' version is CSIDL_APPDATA only for $QUICKLAUNCH
|
||||
// for normal $APPDATA, it'd be CSIDL_APPDATA_COMMON
|
||||
if (fldrs[2] == CSIDL_APPDATA)
|
||||
{
|
||||
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;
|
||||
if (!g_exec_flags.all_user_var)
|
||||
x = 2;
|
||||
}
|
||||
|
||||
while (x--)
|
||||
|
@ -666,8 +642,30 @@ char * NSISCALL GetNSISString(char *outbuf, int strtab)
|
|||
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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue