added $PROGRAMFILES32, $PROGRAMFILES64, $COMMONFILES32 and $COMMONFILES64

git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@5072 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
kichik 2007-04-14 13:54:47 +00:00
parent a3e46a1b13
commit 427d583f68
5 changed files with 50 additions and 35 deletions

View file

@ -250,14 +250,14 @@ FORCE_INLINE int NSISCALL ui_doinstall(void)
{
// Windows 9x
myRegGetStr(HKEY_CURRENT_USER, reg_9x_locale, NULL, g_tmp);
myRegGetStr(HKEY_CURRENT_USER, reg_9x_locale, NULL, g_tmp, 0);
}
if (!g_tmp[0])
{
// Windows NT
// This key exists on 9x as well, so it's only read if ResourceLocale wasn't found
myRegGetStr(HKEY_USERS, reg_nt_locale_key, reg_nt_locale_val, g_tmp);
myRegGetStr(HKEY_USERS, reg_nt_locale_key, reg_nt_locale_val, g_tmp, 0);
}
mystrcat(state_language, g_tmp);
@ -278,7 +278,8 @@ FORCE_INLINE int NSISCALL ui_doinstall(void)
(HKEY)header->install_reg_rootkey,
GetNSISStringNP(header->install_reg_key_ptr),
GetNSISStringNP(header->install_reg_value_ptr),
ps_tmpbuf
ps_tmpbuf,
0
);
if (ps_tmpbuf[0])
{

View file

@ -515,11 +515,11 @@ void NSISCALL MoveFileOnReboot(LPCTSTR pszExisting, LPCTSTR pszNew)
}
#endif
void NSISCALL myRegGetStr(HKEY root, const char *sub, const char *name, char *out)
void NSISCALL myRegGetStr(HKEY root, const char *sub, const char *name, char *out, int x64)
{
HKEY hKey;
*out=0;
if (RegOpenKeyEx(root,sub,0,KEY_READ,&hKey) == ERROR_SUCCESS)
if (RegOpenKeyEx(root,sub,0,KEY_READ|(x64?KEY_WOW64_64KEY:0),&hKey) == ERROR_SUCCESS)
{
DWORD l = NSIS_MAX_STRLEN;
DWORD t;
@ -632,6 +632,24 @@ char * NSISCALL GetNSISString(char *outbuf, int strtab)
x = 4;
}
if (fldrs[0] & 0x80)
{
myRegGetStr(HKEY_LOCAL_MACHINE, SYSREGKEY, GetNSISStringNP(fldrs[0] & 0x3F), out, fldrs[0] & 0x40);
if (!*out)
mystrcpy(out, GetNSISStringNP(fldrs[2]));
x = 0;
}
else if (fldrs[0] == CSIDL_SYSTEM)
{
GetSystemDirectory(out, NSIS_MAX_STRLEN);
x = 0;
}
else if (fldrs[0] == CSIDL_WINDOWS)
{
GetWindowsDirectory(out, NSIS_MAX_STRLEN);
x = 0;
}
while (x--)
{
if (!SHGetSpecialFolderLocation(g_hwnd, fldrs[x], &idl))
@ -646,29 +664,6 @@ char * NSISCALL GetNSISString(char *outbuf, int strtab)
*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)
{
// all users' version is CSIDL_APPDATA only for $QUICKLAUNCH

View file

@ -23,7 +23,7 @@ char * NSISCALL GetNSISString(char *outbuf, int strtab);
#define GetNSISStringTT(strtab) GetNSISString(0, (strtab))
#define GetNSISStringNP(strtab) ((const char *)g_blocks[NB_STRINGS].offset+(strtab))
#define GetNSISTab(strtab) (strtab < 0 ? LANG_STR_TAB(strtab) : strtab)
void NSISCALL myRegGetStr(HKEY root, const char *sub, const char *name, char *out);
void NSISCALL myRegGetStr(HKEY root, const char *sub, const char *name, char *out, int x64);
int NSISCALL myatoi(char *s);
void NSISCALL myitoa(char *s, int d);
char * NSISCALL mystrcpy(char *out, const char *in);