diff --git a/etc/Utilities/7zSD.diff b/etc/Utilities/7zSD.diff
index c401929f..ecc58e5a 100644
--- a/etc/Utilities/7zSD.diff
+++ b/etc/Utilities/7zSD.diff
@@ -1,30 +1,23 @@
- CPP/7zip/Bundles/SFXSetup/Compat.xml | 12 +++++++
- CPP/7zip/Bundles/SFXSetup/SfxSetup.cpp | 52 ++++++++++++++++++++++++------
- CPP/7zip/Bundles/SFXSetup/resource.rc | 4 +--
- CPP/7zip/UI/Explorer/MyMessages.cpp | 4 +--
+ CPP/7zip/Bundles/SFXSetup/Compat.xml | 1 +
+ CPP/7zip/Bundles/SFXSetup/SfxSetup.cpp | 52 +++++++++++++++++++-----
+ CPP/7zip/Bundles/SFXSetup/resource.rc | 4 +-
+ CPP/7zip/UI/Explorer/MyMessages.cpp | 4 +-
CPP/7zip/UI/Explorer/MyMessages.h | 2 +-
CPP/7zip/UI/FileManager/FormatUtils.cpp | 2 +-
- CPP/7zip/UI/FileManager/ProgressDialog.cpp | 4 +--
- 7 files changed, 63 insertions(+), 17 deletions(-)
+ CPP/7zip/UI/FileManager/ProgressDialog.cpp | 4 +-
+ CPP/Common/MyWindows.h | 1 +
+ CPP/Windows/FileDir.cpp | 63 ++++++++++++++++++++++++++----
+ CPP/Windows/FileDir.h | 1 +
+ 10 files changed, 110 insertions(+), 24 deletions(-)
diff --git a/CPP/7zip/Bundles/SFXSetup/Compat.xml b/CPP/7zip/Bundles/SFXSetup/Compat.xml
new file mode 100644
-index 0000000..632a8fa
+index 0000000..76fecef
--- /dev/null
+++ b/CPP/7zip/Bundles/SFXSetup/Compat.xml
-@@ -0,0 +1,12 @@
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
+@@ -0,0 +1 @@
++
+\ No newline at end of file
diff --git a/CPP/7zip/Bundles/SFXSetup/SfxSetup.cpp b/CPP/7zip/Bundles/SFXSetup/SfxSetup.cpp
index aef2e19..7f856f1 100644
--- a/CPP/7zip/Bundles/SFXSetup/SfxSetup.cpp
@@ -212,3 +205,122 @@ index 65201a9..4d23499 100644
_inCancelMessageBox = false;
Sync.SetPaused(paused);
if (res == IDCANCEL || res == IDNO)
+diff --git a/CPP/Common/MyWindows.h b/CPP/Common/MyWindows.h
+index 139a4e8..c40767f 100644
+--- a/CPP/Common/MyWindows.h
++++ b/CPP/Common/MyWindows.h
+@@ -6,6 +6,7 @@
+ #ifdef _WIN32
+
+ #include
++#include
+
+ #ifdef UNDER_CE
+ #undef VARIANT_TRUE
+diff --git a/CPP/Windows/FileDir.cpp b/CPP/Windows/FileDir.cpp
+index da71b71..f21400b 100644
+--- a/CPP/Windows/FileDir.cpp
++++ b/CPP/Windows/FileDir.cpp
+@@ -14,6 +14,8 @@
+ extern bool g_IsNT;
+ #endif
+
++static CFSTR kTempDirName = FTEXT("TEMP");
++
+ using namespace NWindows;
+ using namespace NFile;
+ using namespace NName;
+@@ -67,6 +69,36 @@ bool GetSystemDir(FString &path)
+ }
+ return (needLength > 0 && needLength <= MAX_PATH);
+ }
++
++bool GetAppDataDir(FString &path)
++{
++ HRESULT hResult;
++ static const int FolderId[] = { CSIDL_LOCAL_APPDATA, CSIDL_APPDATA, CSIDL_PROFILE, NULL };
++ for(size_t i = 0; i < 3; ++i)
++ {
++ #ifndef _UNICODE
++ if (!g_IsNT)
++ {
++ TCHAR s[MAX_PATH + 2];
++ s[0] = 0;
++ hResult = ::SHGetFolderPath(NULL, FolderId[i] | CSIDL_FLAG_CREATE, NULL, 0, s);
++ path = fas2fs(s);
++ }
++ else
++ #endif
++ {
++ WCHAR s[MAX_PATH + 2];
++ s[0] = 0;
++ hResult = ::SHGetFolderPathW(NULL, FolderId[i] | CSIDL_FLAG_CREATE, NULL, 0, s);
++ path = us2fs(s);
++ }
++ if(hResult == S_OK)
++ {
++ return true; /*success*/
++ }
++ }
++ return false;
++}
+ #endif
+
+ bool SetDirTime(CFSTR path, const FILETIME *cTime, const FILETIME *aTime, const FILETIME *mTime)
+@@ -566,7 +598,7 @@ bool MyGetTempPath(FString &path)
+ {
+ WCHAR s[MAX_PATH + 2];
+ s[0] = 0;
+- needLength = ::GetTempPathW(MAX_PATH + 1, s);;
++ needLength = ::GetTempPathW(MAX_PATH + 1, s);
+ path = us2fs(s);
+ }
+ return (needLength > 0 && needLength <= MAX_PATH);
+@@ -671,12 +703,29 @@ bool CTempDir::Create(CFSTR prefix)
+ if (!Remove())
+ return false;
+ FString tempPath;
+- if (!MyGetTempPath(tempPath))
+- return false;
+- if (!CreateTempFile(tempPath + prefix, true, _path, NULL))
+- return false;
+- _mustBeDeleted = true;
+- return true;
++ if (MyGetTempPath(tempPath))
++ {
++ if (CreateTempFile(tempPath + prefix, true, _path, NULL))
++ {
++ _mustBeDeleted = true;
++ return true;
++ }
++ }
++ if (GetAppDataDir(tempPath))
++ {
++ tempPath.Add_PathSepar();
++ tempPath += kTempDirName;
++ if(CreateComplexDir(tempPath))
++ {
++ tempPath.Add_PathSepar();
++ if (CreateTempFile(tempPath + prefix, true, _path, NULL))
++ {
++ _mustBeDeleted = true;
++ return true;
++ }
++ }
++ }
++ return false;
+ }
+
+ bool CTempDir::Remove()
+diff --git a/CPP/Windows/FileDir.h b/CPP/Windows/FileDir.h
+index b13d1cc..1d87bbf 100644
+--- a/CPP/Windows/FileDir.h
++++ b/CPP/Windows/FileDir.h
+@@ -13,6 +13,7 @@ namespace NDir {
+
+ bool GetWindowsDir(FString &path);
+ bool GetSystemDir(FString &path);
++bool GetAppDataDir(FString &path);
+
+ bool SetDirTime(CFSTR path, const FILETIME *cTime, const FILETIME *aTime, const FILETIME *mTime);
+ bool SetFileAttrib(CFSTR path, DWORD attrib);
diff --git a/etc/Utilities/7zSD.sfx b/etc/Utilities/7zSD.sfx
index cc10c593..4a8f0c3d 100644
Binary files a/etc/Utilities/7zSD.sfx and b/etc/Utilities/7zSD.sfx differ
diff --git a/src/Config.h b/src/Config.h
index 049558a5..d01225e6 100644
--- a/src/Config.h
+++ b/src/Config.h
@@ -35,7 +35,7 @@
#define VER_LAMEXP_MINOR_LO 4
#define VER_LAMEXP_TYPE Beta
#define VER_LAMEXP_PATCH 8
-#define VER_LAMEXP_BUILD 1910
+#define VER_LAMEXP_BUILD 1912
#define VER_LAMEXP_CONFG 1818
///////////////////////////////////////////////////////////////////////////////