diff --git a/etc/Utilities/7zSD.diff b/etc/Utilities/7zSD.diff new file mode 100644 index 00000000..c401929f --- /dev/null +++ b/etc/Utilities/7zSD.diff @@ -0,0 +1,214 @@ + 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/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(-) + +diff --git a/CPP/7zip/Bundles/SFXSetup/Compat.xml b/CPP/7zip/Bundles/SFXSetup/Compat.xml +new file mode 100644 +index 0000000..632a8fa +--- /dev/null ++++ b/CPP/7zip/Bundles/SFXSetup/Compat.xml +@@ -0,0 +1,12 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +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 ++++ b/CPP/7zip/Bundles/SFXSetup/SfxSetup.cpp +@@ -37,6 +37,27 @@ static CFSTR kTempDirPrefix = FTEXT("7zS"); + + #define _SHELL_EXECUTE + ++static HWND GetCurrentHwnd(void) ++{ ++ HWND result = ::GetActiveWindow(); ++ if(!result) ++ { ++ for (int i = 0; i < 256; ++i) ++ { ++ if(i > 0) ++ { ++ ::Sleep(1); /*some delay*/ ++ } ++ result = ::GetForegroundWindow(); ++ if(result) ++ { ++ break; /*done*/ ++ } ++ } ++ } ++ return result; ++} ++ + static bool ReadDataString(CFSTR fileName, LPCSTR startID, + LPCSTR endID, AString &stringResult) + { +@@ -145,7 +166,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /* hPrevInstance */, + + UString archiveName, switches; + #ifdef _SHELL_EXECUTE +- UString executeFile, executeParameters; ++ UString executeFile, executeParameters, executeErrorMsg; + #endif + NCommandLineParser::SplitCommandLine(GetCommandLineW(), archiveName, switches); + +@@ -191,7 +212,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /* hPrevInstance */, + dirPrefix = pairs[index].String; + if (!installPrompt.IsEmpty() && !assumeYes) + { +- if (MessageBoxW(0, installPrompt, friendlyName, MB_YESNO | ++ if (MessageBoxW(NULL, installPrompt, friendlyName, MB_YESNO | MB_SYSTEMMODAL | + MB_ICONQUESTION) != IDYES) + return 0; + } +@@ -200,6 +221,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /* hPrevInstance */, + #ifdef _SHELL_EXECUTE + executeFile = GetTextConfigValue(pairs, L"ExecuteFile"); + executeParameters = GetTextConfigValue(pairs, L"ExecuteParameters"); ++ executeErrorMsg = GetTextConfigValue(pairs, L"ExecuteErrorMsg"); + #endif + } + +@@ -243,7 +265,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /* hPrevInstance */, + { + if (errorMessage.IsEmpty()) + errorMessage = NError::MyFormatMessage(result); +- ::MessageBoxW(0, errorMessage, NWindows::MyLoadString(IDS_EXTRACTION_ERROR_TITLE), MB_ICONERROR); ++ ::MessageBoxW(NULL, errorMessage, NWindows::MyLoadString(IDS_EXTRACTION_ERROR_TITLE), MB_ICONERROR | MB_SYSTEMMODAL); + } + } + return 1; +@@ -287,13 +309,25 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /* hPrevInstance */, + execInfo.lpDirectory = NULL; + execInfo.nShow = SW_SHOWNORMAL; + execInfo.hProcess = 0; +- /* BOOL success = */ ::ShellExecuteEx(&execInfo); +- UINT32 result = (UINT32)(UINT_PTR)execInfo.hInstApp; +- if (result <= 32) ++ ++ for (;;) + { +- if (!assumeYes) +- ShowErrorMessage(L"Can not open file"); +- return 1; ++ execInfo.hwnd = GetCurrentHwnd(); /*prevent UAC dialog from appearing in the background!*/ ++ /* BOOL success = */ ::ShellExecuteEx(&execInfo); ++ UINT32 result = (UINT32)(UINT_PTR)execInfo.hInstApp; ++ if (result <= 32) ++ { ++ if (!assumeYes) ++ { ++ const wchar_t *const lpErrorMessage = executeErrorMsg.IsEmpty() ? L"Failed to launch installer. Please try again!" : executeErrorMsg; ++ if (MessageBoxW(NULL, lpErrorMessage, L"Setup", MB_SYSTEMMODAL | MB_ICONEXCLAMATION | MB_RETRYCANCEL) == IDRETRY) ++ { ++ continue; /*retry*/ ++ } ++ } ++ return 1; ++ } ++ break; /*success*/ + } + hProcess = execInfo.hProcess; + } +diff --git a/CPP/7zip/Bundles/SFXSetup/resource.rc b/CPP/7zip/Bundles/SFXSetup/resource.rc +index 47e1b76..c796e65 100644 +--- a/CPP/7zip/Bundles/SFXSetup/resource.rc ++++ b/CPP/7zip/Bundles/SFXSetup/resource.rc +@@ -1,14 +1,14 @@ + #include "../../MyVersionInfo.rc" + #include "resource.h" + +-MY_VERSION_INFO_APP("7z Setup SFX", "7zS.sfx") ++MY_VERSION_INFO_APP("Setup SFX", "7zS.sfx") + + IDI_ICON ICON "setup.ico" + + STRINGTABLE + BEGIN + IDS_EXTRACTION_ERROR_TITLE "Extraction Failed" +- IDS_EXTRACTION_ERROR_MESSAGE "File is corrupt" ++ IDS_EXTRACTION_ERROR_MESSAGE "File is corrupt. Please download again!" + IDS_CANNOT_CREATE_FOLDER "Cannot create folder '{0}'" + IDS_PROGRESS_EXTRACTING "Extracting" + END +diff --git a/CPP/7zip/UI/Explorer/MyMessages.cpp b/CPP/7zip/UI/Explorer/MyMessages.cpp +index 70c2a46..84ac8f4 100644 +--- a/CPP/7zip/UI/Explorer/MyMessages.cpp ++++ b/CPP/7zip/UI/Explorer/MyMessages.cpp +@@ -1,6 +1,6 @@ + // MyMessages.cpp + +-#include "StdAfx.h" ++//#include "StdAfx.h" + + #include "MyMessages.h" + +@@ -13,7 +13,7 @@ using namespace NWindows; + + void ShowErrorMessage(HWND window, LPCWSTR message) + { +- ::MessageBoxW(window, message, L"7-Zip", MB_OK | MB_ICONSTOP); ++ ::MessageBoxW(window, message, L"Setup", MB_OK | MB_SYSTEMMODAL | MB_ICONSTOP); + } + + void ShowErrorMessageHwndRes(HWND window, UINT resID) +diff --git a/CPP/7zip/UI/Explorer/MyMessages.h b/CPP/7zip/UI/Explorer/MyMessages.h +index d5822f4..3bd6e2e 100644 +--- a/CPP/7zip/UI/Explorer/MyMessages.h ++++ b/CPP/7zip/UI/Explorer/MyMessages.h +@@ -6,7 +6,7 @@ + #include "../../../Common/MyString.h" + + void ShowErrorMessage(HWND window, LPCWSTR message); +-inline void ShowErrorMessage(LPCWSTR message) { ShowErrorMessage(0, message); } ++inline void ShowErrorMessage(LPCWSTR message) { ShowErrorMessage(NULL, message); } + + void ShowErrorMessageHwndRes(HWND window, UInt32 langID); + void ShowErrorMessageRes(UInt32 langID); +diff --git a/CPP/7zip/UI/FileManager/FormatUtils.cpp b/CPP/7zip/UI/FileManager/FormatUtils.cpp +index 2143c3f..3a18712 100644 +--- a/CPP/7zip/UI/FileManager/FormatUtils.cpp ++++ b/CPP/7zip/UI/FileManager/FormatUtils.cpp +@@ -1,6 +1,6 @@ + // FormatUtils.cpp + +-#include "StdAfx.h" ++//#include "StdAfx.h" + + #include "../../../Common/IntToString.h" + +diff --git a/CPP/7zip/UI/FileManager/ProgressDialog.cpp b/CPP/7zip/UI/FileManager/ProgressDialog.cpp +index 65201a9..4d23499 100644 +--- a/CPP/7zip/UI/FileManager/ProgressDialog.cpp ++++ b/CPP/7zip/UI/FileManager/ProgressDialog.cpp +@@ -1,6 +1,6 @@ + // ProgressDialog.cpp + +-#include "StdAfx.h" ++//#include "StdAfx.h" + + #include "../../../Common/IntToString.h" + +@@ -165,7 +165,7 @@ bool CProgressDialog::OnButtonClicked(int buttonID, HWND buttonHWND) + bool paused = Sync.GetPaused(); + Sync.SetPaused(true); + _inCancelMessageBox = true; +- int res = ::MessageBoxW(*this, L"Are you sure you want to cancel?", _title, MB_YESNOCANCEL); ++ int res = ::MessageBoxW(*this, L"Are you sure you want to cancel?", _title, MB_YESNOCANCEL | MB_SYSTEMMODAL); + _inCancelMessageBox = false; + Sync.SetPaused(paused); + if (res == IDCANCEL || res == IDNO) diff --git a/etc/Utilities/7zSD.sfx b/etc/Utilities/7zSD.sfx index 28fa8e12..cc10c593 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 35e14c9d..049558a5 100644 --- a/src/Config.h +++ b/src/Config.h @@ -34,8 +34,8 @@ #define VER_LAMEXP_MINOR_HI 1 #define VER_LAMEXP_MINOR_LO 4 #define VER_LAMEXP_TYPE Beta -#define VER_LAMEXP_PATCH 7 -#define VER_LAMEXP_BUILD 1909 +#define VER_LAMEXP_PATCH 8 +#define VER_LAMEXP_BUILD 1910 #define VER_LAMEXP_CONFG 1818 ///////////////////////////////////////////////////////////////////////////////