Try FOLDERID_LocalAppDataLow\Temp as last ValidateTempDir() attempt for Low IL aka Protected IE
git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@6121 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
parent
73501896d4
commit
accab7bdbd
3 changed files with 44 additions and 5 deletions
|
@ -174,11 +174,47 @@ int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPTSTR lpszCmdPara
|
|||
GetTempPath(NSIS_MAX_STRLEN, state_temp_dir);
|
||||
if (!ValidateTempDir())
|
||||
{
|
||||
LPTSTR tstrslashtemp = _T("\\Temp");
|
||||
GetWindowsDirectory(state_temp_dir, NSIS_MAX_STRLEN - 5); // leave space for \Temp
|
||||
mystrcat(state_temp_dir, _T("\\Temp"));
|
||||
mystrcat(state_temp_dir, tstrslashtemp);
|
||||
if (!ValidateTempDir())
|
||||
{
|
||||
goto end;
|
||||
const int myKF_FLAG_CREATE=0x00008000;
|
||||
const GUID myFOLDERID_LocalAppDataLow={0xA520A1A4,0x1780,0x4FF6,{0xBD,0x18,0x16,0x73,0x43,0xC5,0xAF,0x16}};
|
||||
void* pfnSHGetKnownFolderPath=myGetProcAddress(MGA_SHGetKnownFolderPath);
|
||||
WCHAR* localapplow;
|
||||
HRESULT hr = E_NOTIMPL;
|
||||
if (pfnSHGetKnownFolderPath)
|
||||
{
|
||||
// There does not seem to be a API to get the low temp dir directly, so we build the path on our own
|
||||
hr = ((HRESULT(WINAPI*)(void*,DWORD,HANDLE,WCHAR**))pfnSHGetKnownFolderPath)((void*)&myFOLDERID_LocalAppDataLow, myKF_FLAG_CREATE, NULL, &localapplow);
|
||||
}
|
||||
if (S_OK == hr)
|
||||
{
|
||||
#ifdef _UNICODE
|
||||
if (mystrlen(localapplow) < NSIS_MAX_STRLEN - 5)
|
||||
{
|
||||
addtrailingslash(state_temp_dir);
|
||||
mystrcat(state_temp_dir, &tstrslashtemp[1]);
|
||||
}
|
||||
#else
|
||||
if (lstrlenW(localapplow) < NSIS_MAX_STRLEN - 5)
|
||||
{
|
||||
BOOL useddefchar=FALSE;
|
||||
WideCharToMultiByte(CP_ACP, WC_NO_BEST_FIT_CHARS, localapplow, -1, state_temp_dir, NSIS_MAX_STRLEN, NULL, &useddefchar);
|
||||
if (!useddefchar)
|
||||
{
|
||||
addtrailingslash(state_temp_dir);
|
||||
mystrcat(state_temp_dir, &tstrslashtemp[1]);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
CoTaskMemFree(localapplow);
|
||||
}
|
||||
if (!ValidateTempDir())
|
||||
{
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
}
|
||||
DeleteFile(state_language);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue