From 03dafabae1842d8e66812625640a5e34b26a2fdd Mon Sep 17 00:00:00 2001 From: Rom Walton Date: Wed, 21 Jun 2006 19:43:03 +0000 Subject: [PATCH] *** empty log message *** svn path=/trunk/boinc/; revision=10441 --- checkin_notes | 11 ++++++++ win_build/boinc_cli_curl.vcproj | 8 +++--- win_build/installerv2/BOINC.ism | Bin 206336 -> 206336 bytes .../Windows/src/boinccas/CAShutdownBOINC.cpp | 24 +++++++++++++++--- .../redist/Windows/src/boinccas/boinccas.rc | 8 +++--- .../redist/Windows/x86/boinccas.dll | Bin 81920 -> 81920 bytes .../redist/Windows/x86/boinccas95.dll | Bin 69632 -> 69632 bytes 7 files changed, 39 insertions(+), 12 deletions(-) diff --git a/checkin_notes b/checkin_notes index 84621ba43b..2c68c4decc 100755 --- a/checkin_notes +++ b/checkin_notes @@ -6507,3 +6507,14 @@ David 21 June 2006 cpu_sched.C sched/ file_upload_handler.C + +Rom 21 June 2006 + - Bug Fix: Two setup failure logs that were sent to me indicate that + the uninstall process didn’t clean up the BOINC entry in the + service control manager. Check, before attempting to shutdown, + BOINC to make sure it is executing or is capable of responding + to a ControlService event. + + win_build/installerv2/redist/Windows/src/boinccas + CAShutdownBOINC.cpp + boinccas.rc diff --git a/win_build/boinc_cli_curl.vcproj b/win_build/boinc_cli_curl.vcproj index 8947b9bedb..73cd7d8614 100644 --- a/win_build/boinc_cli_curl.vcproj +++ b/win_build/boinc_cli_curl.vcproj @@ -45,7 +45,7 @@ Name="VCCustomBuildTool"/> 7f^YqHVH!^q>c0NHrczL}N_wQVt#nXK^v;WDYZ#$;|h&v1#1cG`{4i z_8;Fiy5WO{NL@5^fPF27bvm7V;}JO7*fSa}HkRkEu@YAhl0_ooP??iv#X?T3J6foI z9C$5hmiHHnB%kKj7&fy=T$Nk7zJ~eI7OGwzu;yJjvB(v%mMkWmw5Z)+abtgZ2h~?* z`vU8s$$)RnJK=Nsf=tlq^^S&|lYy~Gr^oGQCfuGgjE4zdPZu~LlNxu8yF95?PRJHk ziz!Z!2w$G?HP&wn`uhE6rnVD0ptCn#J&6KaDin)FW2sSEi%2kj*t+Z0R#)`}WsAha zgq2DnVc7HxnzE+e- z9*0D+AmTaCyi0iuTc?%x5K!{XCLC5xP56~ob|GV|FnYHt{f2isD%SI-)FTG;8Pqxv zWs^!viM1sXC{mJGFc;fPkQNPSDg^5mW3d*o z6g~Olw9!23N%pV^R?#fv{Q+VLTB7vk#ghm3;vw{`ZgfsFpJC=ZUuNe(+BuNkt??6T zss7~SGpo%niJgj&wvHqzXc5K6dY$xUP}Yjne`38&jOB<$+732I@6O_})45bGmAQ95 zlP+X3YBrf&D5%M7uAE7hvz6Iox>!-u)tp+W7K`^S{jnzK3hC*4ewT|w+)3;G%Ztb& zhV9jR#CXeFq-RGv#r$z-wv3@u9@Jjo-lfHFtZsFtKhLpCA@nLi z=f8oE`bx-S<`GYC&7mo}JpeZ=mC(N2u^&oQ3V^p?L*kZa56fau^og%A3w=PfC?x&t z%6DX>83}+b(Cc9!W(0tdDX?+345Y8Xz{Q{7IF4@bqEqZB0g^(eD=^8_GJM6|nlrHg zJR>!*6Lj$=2vlf8z|_X9J!X%dL&z0hIeR%}cE|7q*k|bO0Awl;LF|75=j;cEFvChi z*iUrA^Q1q5isVK?NA-^r|CKj>!&5gSBDN9rHXYCB2zH}{>A}uUKTaW9lX1Tr#xXO1 zCs-_uc^tdC-qNl${{5-3+0vTpo3|S+ZDV!q?rfgLC-Dy+kF5y`euHBiVobpoguj}l Br%?a^ diff --git a/win_build/installerv2/redist/Windows/src/boinccas/CAShutdownBOINC.cpp b/win_build/installerv2/redist/Windows/src/boinccas/CAShutdownBOINC.cpp index a41f2dbe5a..c1fffb8268 100644 --- a/win_build/installerv2/redist/Windows/src/boinccas/CAShutdownBOINC.cpp +++ b/win_build/installerv2/redist/Windows/src/boinccas/CAShutdownBOINC.cpp @@ -80,6 +80,12 @@ typedef SC_HANDLE (WINAPI *tCS)( LPSERVICE_STATUS lpServiceStatus ); +// QueryServiceStatus() +typedef BOOL (WINAPI *tQSS)( + SC_HANDLE hService, + LPSERVICE_STATUS lpServiceStatus +); + UINT CAShutdownBOINC::OnExecution() { SC_HANDLE schSCManager = NULL; @@ -89,6 +95,7 @@ UINT CAShutdownBOINC::OnExecution() tOSCM pOSCM = NULL; tOS pOS = NULL; tCS pCS = NULL; + tQSS pQSS = NULL; HMODULE hAdvapi32 = LoadLibrary(_T("advapi32.dll")); @@ -96,16 +103,18 @@ UINT CAShutdownBOINC::OnExecution() pOSCM = (tOSCM)GetProcAddress(hAdvapi32, _T("OpenSCManagerA")); pOS = (tOS)GetProcAddress(hAdvapi32, _T("OpenServiceA")); pCS = (tCS)GetProcAddress(hAdvapi32, _T("ControlService")); - if (!pOSCM && !pOS && !pCS) { + pQSS = (tQSS)GetProcAddress(hAdvapi32, _T("QueryServiceStatus")); + if (!pOSCM && !pOS && !pCS && !pQSS) { FreeLibrary(hAdvapi32); hAdvapi32 = NULL; pOSCM = NULL; pOS = NULL; pCS = NULL; + pQSS = NULL; } } - if (pOSCM && pOS && pCS) { + if (pOSCM && pOS && pCS && pQSS) { schSCManager = pOSCM( NULL, // local machine NULL, // ServicesActive database @@ -120,9 +129,16 @@ UINT CAShutdownBOINC::OnExecution() if (schService) { - if (!pCS(schService, SERVICE_CONTROL_STOP, &ssStatus)) + if (pQSS(schService, &ssStatus)) { - uiReturn = ERROR_INSTALL_FAILURE; + if (!((SERVICE_STOPPED == ssStatus.dwCurrentState) && + (SERVICE_STOP_PENDING == ssStatus.dwCurrentState))) + { + if (!pCS(schService, SERVICE_CONTROL_STOP, &ssStatus)) + { + uiReturn = ERROR_INSTALL_FAILURE; + } + } } } } diff --git a/win_build/installerv2/redist/Windows/src/boinccas/boinccas.rc b/win_build/installerv2/redist/Windows/src/boinccas/boinccas.rc index 276aaf58be..53e0331fb6 100644 --- a/win_build/installerv2/redist/Windows/src/boinccas/boinccas.rc +++ b/win_build/installerv2/redist/Windows/src/boinccas/boinccas.rc @@ -53,8 +53,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,0,0,5 - PRODUCTVERSION 1,0,0,5 + FILEVERSION 1,0,0,6 + PRODUCTVERSION 1,0,0,6 FILEFLAGSMASK 0x17L #ifdef _DEBUG FILEFLAGS 0x1L @@ -70,12 +70,12 @@ BEGIN BLOCK "040904b0" BEGIN VALUE "FileDescription", "BOINC Dynamic Link Library" - VALUE "FileVersion", "1, 0, 0, 5" + VALUE "FileVersion", "1, 0, 0, 6" VALUE "InternalName", "BOINC" VALUE "LegalCopyright", "Copyright (C) 2005" VALUE "OriginalFilename", "BOINC.dll" VALUE "ProductName", " BOINC Dynamic Link Library" - VALUE "ProductVersion", "1, 0, 0, 5" + VALUE "ProductVersion", "1, 0, 0, 6" END END BLOCK "VarFileInfo" diff --git a/win_build/installerv2/redist/Windows/x86/boinccas.dll b/win_build/installerv2/redist/Windows/x86/boinccas.dll index d72e71d9c2a4b143c4e4c215663d7576b9267215..6543556d524d0a515914c124a370b7e5a1d31a19 100644 GIT binary patch delta 73 zcmZo@U~On%UBJk!J%8qAW=6*YV21m_y=sh1n^|A17h=`|N^JjiSCo^D0R$Ks*rv}F WV0_DHw!K@B(VY=UUlwB2)dc{f?H4ux delta 73 zcmZo@U~On%UBJkkws-nwW=6*YV21m_y=sh%n^|A17XtIQ|GF#6$;to%j0~*P=L#^s UWi;L1Ey(E32&69yG3x390NDT-Hvj+t diff --git a/win_build/installerv2/redist/Windows/x86/boinccas95.dll b/win_build/installerv2/redist/Windows/x86/boinccas95.dll index d697fcfb6c9bc4d5886a498f785beaeb2e83a85f..bb0c5356f472a960a995ff96e8d7f9a6d3bc3556 100644 GIT binary patch delta 9437 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 Wr9!!|3A>VM#}^-s<7RJp!~P!yD+~t! delta 9397 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