From 9762988f1be3f5a42977c8ea680c6bdf755a88a0 Mon Sep 17 00:00:00 2001 From: Lyubomir Marinov Date: Fri, 26 Nov 2010 22:11:10 +0000 Subject: [PATCH] Fixes 'Check for Updates' on Windows to start the setup as an update, not as a new install. The fix should be in effect after it is installed i.e. the setup may be started a new install once but it should start as an update afterwards. --- resources/install/windows/up2date.c | 72 ++++++++++++------ resources/install/windows/up2date.exe | Bin 7168 -> 13824 bytes .../install/windows/up2date.exe.manifest | 5 ++ 3 files changed, 55 insertions(+), 22 deletions(-) create mode 100644 resources/install/windows/up2date.exe.manifest diff --git a/resources/install/windows/up2date.c b/resources/install/windows/up2date.c index 53e3f319c..ba9f786ad 100644 --- a/resources/install/windows/up2date.c +++ b/resources/install/windows/up2date.c @@ -4,6 +4,7 @@ * Distributable under LGPL license. * See terms of license at gnu.org. */ +#define WIN32_LEAN_AND_MEAN #include #include /* ShellExecute */ #include /* CreateToolhelp32Snapshot */ @@ -32,14 +33,18 @@ DWORD up2date_getExePath(LPTSTR, DWORD); DWORD up2date_getParentProcessId(DWORD *); LPTSTR up2date_getWaitParent(LPTSTR, BOOL *); LPTSTR up2date_skipWhitespace(LPTSTR); -LPTSTR up2date_str2tstr(LPCSTR); +LPWSTR up2date_str2wstr(LPCSTR); DWORD up2date_waitParent(); int WINAPI WinMain(HINSTANCE instance, HINSTANCE prevInstance, LPSTR cmdLine, int cmdShow) { LPTSTR commandLine; - commandLine = up2date_str2tstr(cmdLine); +#ifdef _UNICODE + commandLine = up2date_str2wstr(cmdLine); +#else + commandLine = cmdLine; +#endif if (commandLine) { BOOL waitParent; LPTSTR noWaitParentCommandLine; @@ -79,31 +84,56 @@ WinMain(HINSTANCE instance, HINSTANCE prevInstance, LPSTR cmdLine, int cmdShow) DWORD up2date_createProcess(LPCTSTR commandLine) { LPWSTR *argv; + LPWSTR wCommandLine; int argc; DWORD error; - argv = CommandLineToArgvW(commandLine, &argc); +#ifdef _UNICODE + wCommandLine = commandLine; +#else + wCommandLine = up2date_str2wstr(commandLine); + if (!wCommandLine) + return ERROR_NOT_ENOUGH_MEMORY; +#endif + + argv = CommandLineToArgvW(wCommandLine, &argc); if (argv) { + switch (argc) { - case 2: - if (!SetEnvironmentVariable( - TEXT("SIP_COMMUNICATOR_AUTOUPDATE_INSTALLDIR"), + case 2: { + LPWSTR environmentVariableName + = up2date_str2wstr("SIP_COMMUNICATOR_AUTOUPDATE_INSTALLDIR"); + + if (!environmentVariableName) + { + error = ERROR_NOT_ENOUGH_MEMORY; + break; + } + if (!SetEnvironmentVariableW( + environmentVariableName, *(argv + 1))) { error = GetLastError(); + free(environmentVariableName); break; } + free(environmentVariableName); + } case 1: { - STARTUPINFO si; + STARTUPINFOW si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); - error - = CreateProcess(NULL, *argv, NULL, NULL, FALSE, 0, NULL, - NULL, &si, &pi) - ? 0 - : GetLastError(); + if (CreateProcessW(NULL, *argv, NULL, NULL, FALSE, 0, NULL, NULL, + &si, &pi)) + { + error = 0; + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + } + else + error = GetLastError(); } break; default: @@ -114,6 +144,10 @@ up2date_createProcess(LPCTSTR commandLine) { LocalFree((HLOCAL) argv); } else error = GetLastError(); + + if (((LPVOID) wCommandLine) != ((LPVOID) commandLine)) + free(wCommandLine); + return error; } @@ -235,17 +269,15 @@ up2date_skipWhitespace(LPTSTR str) { return str; } -LPTSTR -up2date_str2tstr(LPCSTR str) { - LPTSTR tstr; - -#ifdef UNICODE +LPWSTR +up2date_str2wstr(LPCSTR str) { int tstrSize; + LPWSTR tstr; tstrSize = MultiByteToWideChar(CP_THREAD_ACP, 0, str, -1, NULL, 0); if (tstrSize) { - tstr = (LPTSTR) malloc(tstrSize * sizeof(TCHAR)); + tstr = (LPWSTR) malloc(tstrSize * sizeof(WCHAR)); if (tstr) { tstrSize = MultiByteToWideChar(CP_THREAD_ACP, 0, str, -1, tstr, tstrSize); @@ -257,10 +289,6 @@ up2date_str2tstr(LPCSTR str) { tstr = NULL; } else tstr = NULL; -#else - tstr = str; -#endif - return tstr; } diff --git a/resources/install/windows/up2date.exe b/resources/install/windows/up2date.exe index d66c8474f2bb1fb4502f9530980411ad8f2bb6da..f31963dd4b162d24dd3faf1dff20e448396ad60b 100644 GIT binary patch literal 13824 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 NUcGa5{O7aBe*xtCOLYJM literal 7168 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 diff --git a/resources/install/windows/up2date.exe.manifest b/resources/install/windows/up2date.exe.manifest new file mode 100644 index 000000000..331db8258 --- /dev/null +++ b/resources/install/windows/up2date.exe.manifest @@ -0,0 +1,5 @@ + + + + +