From 0117e3138e67410e74e77183d1640ffa60cd33b1 Mon Sep 17 00:00:00 2001 From: kichik Date: Tue, 23 Jan 2007 19:41:28 +0000 Subject: [PATCH] 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 --- Source/build.cpp | 2 +- Source/exehead/util.c | 60 +++++++++++++++++++++---------------------- 2 files changed, 30 insertions(+), 32 deletions(-) diff --git a/Source/build.cpp b/Source/build.cpp index 2641b8c2..cb150966 100644 --- a/Source/build.cpp +++ b/Source/build.cpp @@ -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); diff --git a/Source/exehead/util.c b/Source/exehead/util.c index 1c041dfe..7d82719b 100644 --- a/Source/exehead/util.c +++ b/Source/exehead/util.c @@ -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)