mirror of https://github.com/BOINC/boinc.git
*** empty log message ***
svn path=/trunk/boinc/; revision=5368
This commit is contained in:
parent
5a2a60ad91
commit
6049c6756f
|
@ -24291,3 +24291,30 @@ David 8 Feb 2005
|
|||
setup_project.py
|
||||
tools/
|
||||
make_project
|
||||
|
||||
Rom 8 Feb 2005
|
||||
- Bug Fix: Add the ability for setup to shutdown any running instances
|
||||
of the BOINC Manager during install and uninstall.
|
||||
- Bug Fix: Change "Launch the program" to "Launch the BOINC Manager"
|
||||
- Bug Fix: Fix a number of event bubble up issues with the base
|
||||
wxTaskBarEx class, the sample format provided with the wxWidget
|
||||
framework leads down the wrong path if you try to extend the class.
|
||||
- Bug Fix: Add another custom action dll to do the actual shutdown
|
||||
of the BOINC Manager
|
||||
|
||||
clientgui/
|
||||
BOINCGUIApp.cpp
|
||||
BOINCTaskBar.cpp, .h
|
||||
clientgui/msw/
|
||||
taskbarex.cpp, .h
|
||||
win_build/installerv2/
|
||||
BOINC.ism
|
||||
win_build/installerv2/Windows/src/ShutdownBOINCManager
|
||||
ShutdownBOINCManager.cpp ( added )
|
||||
ShutdownBOINCManager.def ( added )
|
||||
ShutdownBOINCManager.sln ( added )
|
||||
ShutdownBOINCManager.vcproj ( added )
|
||||
stdafx.cpp, .h ( added )
|
||||
win_build/installerv2/Windows/x86/
|
||||
shutdown.dll
|
||||
|
|
@ -99,6 +99,7 @@ bool CBOINCGUIApp::OnInit()
|
|||
wxLog::SetActiveTarget(m_pLog);
|
||||
|
||||
m_pLog->AddTraceMask( wxT("Function Start/End") );
|
||||
m_pLog->AddTraceMask( wxT("Function Status") );
|
||||
|
||||
// Enable the in memory virtual file system for
|
||||
// storing images
|
||||
|
|
|
@ -38,6 +38,11 @@ BEGIN_EVENT_TABLE (CTaskBarIcon, wxTaskBarIconEx)
|
|||
EVT_MENU_RANGE(ID_TB_NETWORKRUNALWAYS, ID_TB_NETWORKSUSPEND, CTaskBarIcon::OnNetworkSelection)
|
||||
EVT_MENU(wxID_ABOUT, CTaskBarIcon::OnAbout)
|
||||
EVT_MENU(wxID_EXIT, CTaskBarIcon::OnExit)
|
||||
|
||||
#ifdef __WXMSW__
|
||||
EVT_TASKBAR_SHUTDOWN(CTaskBarIcon::OnShutdown)
|
||||
#endif
|
||||
|
||||
EVT_IDLE(CTaskBarIcon::OnIdle)
|
||||
EVT_CLOSE(CTaskBarIcon::OnClose)
|
||||
EVT_TASKBAR_MOVE(CTaskBarIcon::OnMouseMove)
|
||||
|
@ -53,7 +58,7 @@ END_EVENT_TABLE ()
|
|||
|
||||
|
||||
CTaskBarIcon::CTaskBarIcon() :
|
||||
wxTaskBarIconEx()
|
||||
wxTaskBarIconEx( wxT("BOINCManagerSystray") )
|
||||
{
|
||||
m_iconTaskBarIcon = wxIcon( boinc_xpm );
|
||||
m_dtLastHoverDetected = wxDateTime( (time_t)0 );
|
||||
|
@ -146,19 +151,40 @@ void CTaskBarIcon::OnAbout( wxCommandEvent& WXUNUSED(event) )
|
|||
}
|
||||
|
||||
|
||||
void CTaskBarIcon::OnExit( wxCommandEvent& WXUNUSED(event) )
|
||||
void CTaskBarIcon::OnExit( wxCommandEvent& event )
|
||||
{
|
||||
ResetTaskBar();
|
||||
wxLogTrace(wxT("Function Start/End"), wxT("CTaskBarIcon::OnExit - Function Begin"));
|
||||
|
||||
CMainFrame* pFrame = wxGetApp().GetFrame();
|
||||
wxASSERT(NULL != pFrame);
|
||||
wxASSERT(wxDynamicCast(pFrame, CMainFrame));
|
||||
wxCloseEvent eventClose;
|
||||
|
||||
if ( NULL != pFrame )
|
||||
pFrame->Close(true);
|
||||
OnClose( eventClose );
|
||||
|
||||
if ( eventClose.GetSkipped() ) event.Skip();
|
||||
|
||||
wxLogTrace(wxT("Function Start/End"), wxT("CTaskBarIcon::OnExit - Function End"));
|
||||
}
|
||||
|
||||
|
||||
#ifdef __WXMSW__
|
||||
|
||||
|
||||
void CTaskBarIcon::OnShutdown( wxTaskBarIconExEvent& event )
|
||||
{
|
||||
wxLogTrace(wxT("Function Start/End"), wxT("CTaskBarIcon::OnShutdown - Function Begin"));
|
||||
|
||||
wxCloseEvent eventClose;
|
||||
|
||||
OnClose( eventClose );
|
||||
|
||||
if ( eventClose.GetSkipped() ) event.Skip();
|
||||
|
||||
wxLogTrace(wxT("Function Start/End"), wxT("CTaskBarIcon::OnShutdown - Function End"));
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
void CTaskBarIcon::OnIdle( wxIdleEvent& event )
|
||||
{
|
||||
wxGetApp().UpdateSystemIdleDetection();
|
||||
|
@ -168,6 +194,8 @@ void CTaskBarIcon::OnIdle( wxIdleEvent& event )
|
|||
|
||||
void CTaskBarIcon::OnClose( wxCloseEvent& event )
|
||||
{
|
||||
wxLogTrace(wxT("Function Start/End"), wxT("CTaskBarIcon::OnClose - Function Begin"));
|
||||
|
||||
ResetTaskBar();
|
||||
|
||||
CMainFrame* pFrame = wxGetApp().GetFrame();
|
||||
|
@ -178,6 +206,8 @@ void CTaskBarIcon::OnClose( wxCloseEvent& event )
|
|||
pFrame->Close(true);
|
||||
|
||||
event.Skip();
|
||||
|
||||
wxLogTrace(wxT("Function Start/End"), wxT("CTaskBarIcon::OnClose - Function End"));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -44,6 +44,9 @@ public:
|
|||
void OnNetworkSelection( wxCommandEvent& event );
|
||||
void OnAbout( wxCommandEvent& event );
|
||||
void OnExit( wxCommandEvent& event );
|
||||
#ifdef __WXMSW__
|
||||
void OnShutdown( wxTaskBarIconExEvent& event );
|
||||
#endif
|
||||
|
||||
void OnIdle( wxIdleEvent& event );
|
||||
void OnClose( wxCloseEvent& event );
|
||||
|
|
|
@ -20,7 +20,10 @@
|
|||
LRESULT APIENTRY wxTaskBarIconExWindowProc( HWND hWnd, unsigned msg, UINT wParam, LONG lParam );
|
||||
|
||||
wxChar *wxTaskBarExWindowClass = (wxChar*) wxT("wxTaskBarExWindowClass");
|
||||
wxChar *wxTaskBarExWindow = (wxChar*) wxT("wxTaskBarExWindow");
|
||||
|
||||
const UINT WM_TASKBARCREATED = ::RegisterWindowMessage(wxT("TaskbarCreated"));
|
||||
const UINT WM_TASKBARSHUTDOWN = ::RegisterWindowMessage(wxT("TaskbarShutdown"));
|
||||
|
||||
wxList wxTaskBarIconEx::sm_taskBarIcons;
|
||||
bool wxTaskBarIconEx::sm_registeredClass = FALSE;
|
||||
|
@ -34,6 +37,7 @@ DEFINE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_SHOW )
|
|||
DEFINE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_HIDE )
|
||||
DEFINE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_TIMEOUT )
|
||||
DEFINE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_USERCLICK )
|
||||
DEFINE_EVENT_TYPE( wxEVT_TASKBAR_SHUTDOWN )
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxTaskBarIconEx, wxEvtHandler)
|
||||
|
||||
|
@ -51,7 +55,18 @@ wxTaskBarIconEx::wxTaskBarIconEx(void)
|
|||
AddObject(this);
|
||||
|
||||
if (RegisterWindowClass())
|
||||
m_hWnd = CreateTaskBarWindow();
|
||||
m_hWnd = CreateTaskBarWindow( wxTaskBarExWindow );
|
||||
}
|
||||
|
||||
wxTaskBarIconEx::wxTaskBarIconEx( wxChar* szWindowTitle )
|
||||
{
|
||||
m_hWnd = 0;
|
||||
m_iconAdded = FALSE;
|
||||
|
||||
AddObject(this);
|
||||
|
||||
if (RegisterWindowClass())
|
||||
m_hWnd = CreateTaskBarWindow( szWindowTitle );
|
||||
}
|
||||
|
||||
wxTaskBarIconEx::~wxTaskBarIconEx(void)
|
||||
|
@ -73,8 +88,12 @@ wxTaskBarIconEx::~wxTaskBarIconEx(void)
|
|||
// Events
|
||||
void wxTaskBarIconEx::OnClose(wxCloseEvent& event)
|
||||
{
|
||||
wxLogTrace(wxT("Function Start/End"), wxT("wxTaskBarIconEx::OnClose - Function Begin"));
|
||||
|
||||
::DestroyWindow((HWND) m_hWnd);
|
||||
m_hWnd = 0;
|
||||
|
||||
wxLogTrace(wxT("Function Start/End"), wxT("wxTaskBarIconEx::OnClose - Function End"));
|
||||
}
|
||||
|
||||
void wxTaskBarIconEx::OnTaskBarCreated(wxTaskBarIconExEvent& event)
|
||||
|
@ -293,12 +312,12 @@ bool wxTaskBarIconEx::RegisterWindowClass()
|
|||
return( (rc != 0) );
|
||||
}
|
||||
|
||||
WXHWND wxTaskBarIconEx::CreateTaskBarWindow()
|
||||
WXHWND wxTaskBarIconEx::CreateTaskBarWindow( wxChar* szWindowTitle )
|
||||
{
|
||||
HINSTANCE hInstance = GetModuleHandle(NULL);
|
||||
|
||||
HWND hWnd = CreateWindowEx (0, wxTaskBarExWindowClass,
|
||||
wxT("wxTaskBarExWindow"),
|
||||
szWindowTitle,
|
||||
WS_OVERLAPPED,
|
||||
0,
|
||||
0,
|
||||
|
@ -327,82 +346,108 @@ bool wxTaskBarIconEx::IsBalloonsSupported()
|
|||
|
||||
long wxTaskBarIconEx::WindowProc( WXHWND hWnd, unsigned int msg, unsigned int wParam, long lParam )
|
||||
{
|
||||
wxLogTrace(wxT("Function Start/End"), wxT("wxTaskBarIconEx::WindowProc - Function Begin"));
|
||||
|
||||
wxEventType eventType = 0;
|
||||
long lReturnValue = 0;
|
||||
|
||||
if (msg != sm_taskbarMsg)
|
||||
return DefWindowProc((HWND) hWnd, msg, wParam, lParam);
|
||||
|
||||
switch (lParam)
|
||||
if ( WM_CLOSE == msg )
|
||||
{
|
||||
case WM_LBUTTONDOWN:
|
||||
eventType = wxEVT_TASKBAR_LEFT_DOWN;
|
||||
break;
|
||||
wxLogTrace(wxT("Function Status"), wxT("wxTaskBarIconEx::WindowProc - WM_CLOSE Detected"));
|
||||
|
||||
wxCloseEvent eventClose(wxEVT_CLOSE_WINDOW, hWnd);
|
||||
ProcessEvent(eventClose);
|
||||
|
||||
case WM_LBUTTONUP:
|
||||
eventType = wxEVT_TASKBAR_LEFT_UP;
|
||||
break;
|
||||
if ( !eventClose.GetSkipped() )
|
||||
lReturnValue = DefWindowProc((HWND) hWnd, msg, wParam, lParam);
|
||||
else
|
||||
lReturnValue = 0;
|
||||
}
|
||||
else if ( WM_TASKBARCREATED == msg )
|
||||
{
|
||||
wxLogTrace(wxT("Function Status"), wxT("wxTaskBarIconEx::WindowProc - WM_TASKBARCREATED Detected"));
|
||||
eventType = wxEVT_TASKBAR_CREATED;
|
||||
}
|
||||
else if ( WM_TASKBARSHUTDOWN == msg )
|
||||
{
|
||||
wxLogTrace(wxT("Function Status"), wxT("wxTaskBarIconEx::WindowProc - WM_TASKBARSHUTDOWN Detected"));
|
||||
eventType = wxEVT_TASKBAR_SHUTDOWN;
|
||||
}
|
||||
if (msg != sm_taskbarMsg)
|
||||
lReturnValue = DefWindowProc((HWND) hWnd, msg, wParam, lParam);
|
||||
|
||||
case WM_RBUTTONDOWN:
|
||||
eventType = wxEVT_TASKBAR_RIGHT_DOWN;
|
||||
break;
|
||||
if ( 0 == eventType )
|
||||
{
|
||||
switch (lParam)
|
||||
{
|
||||
case WM_LBUTTONDOWN:
|
||||
eventType = wxEVT_TASKBAR_LEFT_DOWN;
|
||||
break;
|
||||
|
||||
case WM_RBUTTONUP:
|
||||
eventType = wxEVT_TASKBAR_RIGHT_UP;
|
||||
break;
|
||||
case WM_LBUTTONUP:
|
||||
eventType = wxEVT_TASKBAR_LEFT_UP;
|
||||
break;
|
||||
|
||||
case WM_LBUTTONDBLCLK:
|
||||
eventType = wxEVT_TASKBAR_LEFT_DCLICK;
|
||||
break;
|
||||
case WM_RBUTTONDOWN:
|
||||
eventType = wxEVT_TASKBAR_RIGHT_DOWN;
|
||||
break;
|
||||
|
||||
case WM_RBUTTONDBLCLK:
|
||||
eventType = wxEVT_TASKBAR_RIGHT_DCLICK;
|
||||
break;
|
||||
case WM_RBUTTONUP:
|
||||
eventType = wxEVT_TASKBAR_RIGHT_UP;
|
||||
break;
|
||||
|
||||
case WM_MOUSEMOVE:
|
||||
eventType = wxEVT_TASKBAR_MOVE;
|
||||
break;
|
||||
case WM_LBUTTONDBLCLK:
|
||||
eventType = wxEVT_TASKBAR_LEFT_DCLICK;
|
||||
break;
|
||||
|
||||
case WM_CONTEXTMENU:
|
||||
eventType = wxEVT_TASKBAR_CONTEXT_MENU;
|
||||
break;
|
||||
case WM_RBUTTONDBLCLK:
|
||||
eventType = wxEVT_TASKBAR_RIGHT_DCLICK;
|
||||
break;
|
||||
|
||||
case NIN_SELECT:
|
||||
eventType = wxEVT_TASKBAR_SELECT;
|
||||
break;
|
||||
case WM_MOUSEMOVE:
|
||||
eventType = wxEVT_TASKBAR_MOVE;
|
||||
break;
|
||||
|
||||
case NIN_KEYSELECT:
|
||||
eventType = wxEVT_TASKBAR_KEY_SELECT;
|
||||
break;
|
||||
case WM_CONTEXTMENU:
|
||||
eventType = wxEVT_TASKBAR_CONTEXT_MENU;
|
||||
break;
|
||||
|
||||
case NIN_BALLOONSHOW:
|
||||
eventType = wxEVT_TASKBAR_BALLOON_SHOW;
|
||||
break;
|
||||
case NIN_SELECT:
|
||||
eventType = wxEVT_TASKBAR_SELECT;
|
||||
break;
|
||||
|
||||
case NIN_BALLOONHIDE:
|
||||
eventType = wxEVT_TASKBAR_BALLOON_HIDE;
|
||||
break;
|
||||
case NIN_KEYSELECT:
|
||||
eventType = wxEVT_TASKBAR_KEY_SELECT;
|
||||
break;
|
||||
|
||||
case NIN_BALLOONTIMEOUT:
|
||||
eventType = wxEVT_TASKBAR_BALLOON_TIMEOUT;
|
||||
break;
|
||||
case NIN_BALLOONSHOW:
|
||||
eventType = wxEVT_TASKBAR_BALLOON_SHOW;
|
||||
break;
|
||||
|
||||
case NIN_BALLOONUSERCLICK:
|
||||
eventType = wxEVT_TASKBAR_BALLOON_USERCLICK;
|
||||
break;
|
||||
case NIN_BALLOONHIDE:
|
||||
eventType = wxEVT_TASKBAR_BALLOON_HIDE;
|
||||
break;
|
||||
|
||||
default:
|
||||
if ( WM_TASKBARCREATED == lParam )
|
||||
eventType = wxEVT_TASKBAR_CREATED;
|
||||
break;
|
||||
case NIN_BALLOONTIMEOUT:
|
||||
eventType = wxEVT_TASKBAR_BALLOON_TIMEOUT;
|
||||
break;
|
||||
|
||||
case NIN_BALLOONUSERCLICK:
|
||||
eventType = wxEVT_TASKBAR_BALLOON_USERCLICK;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (eventType)
|
||||
{
|
||||
wxTaskBarIconExEvent event(eventType, this);
|
||||
ProcessEvent(event);
|
||||
|
||||
lReturnValue = 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
wxLogTrace(wxT("Function Start/End"), wxT("wxTaskBarIconEx::WindowProc - Function End"));
|
||||
return lReturnValue;
|
||||
}
|
||||
|
||||
LRESULT APIENTRY wxTaskBarIconExWindowProc( HWND hWnd, unsigned msg, UINT wParam, LONG lParam )
|
||||
|
|
|
@ -26,7 +26,10 @@ class wxTaskBarIconExEvent;
|
|||
class wxTaskBarIconEx: public wxEvtHandler {
|
||||
DECLARE_DYNAMIC_CLASS(wxTaskBarIconEx)
|
||||
public:
|
||||
|
||||
wxTaskBarIconEx(void);
|
||||
wxTaskBarIconEx( wxChar* szWindowTitle );
|
||||
|
||||
virtual ~wxTaskBarIconEx(void);
|
||||
|
||||
enum ICONTYPES
|
||||
|
@ -69,7 +72,7 @@ public:
|
|||
static void AddObject(wxTaskBarIconEx* obj);
|
||||
static void RemoveObject(wxTaskBarIconEx* obj);
|
||||
static bool RegisterWindowClass();
|
||||
static WXHWND CreateTaskBarWindow();
|
||||
static WXHWND CreateTaskBarWindow( wxChar* szWindowTitle );
|
||||
static bool IsBalloonsSupported();
|
||||
long WindowProc( WXHWND hWnd, unsigned int msg, unsigned int wParam, long lParam );
|
||||
|
||||
|
@ -114,6 +117,7 @@ DECLARE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_SHOW, 1561 )
|
|||
DECLARE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_HIDE, 1562 )
|
||||
DECLARE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_TIMEOUT, 1563 )
|
||||
DECLARE_EVENT_TYPE( wxEVT_TASKBAR_BALLOON_USERCLICK, 1564 )
|
||||
DECLARE_EVENT_TYPE( wxEVT_TASKBAR_SHUTDOWN, 1565 )
|
||||
END_DECLARE_EVENT_TYPES()
|
||||
|
||||
#define EVT_TASKBAR_CREATED(fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_TASKBAR_CREATED, -1, -1, (wxObjectEventFunction) (wxEventFunction) &fn, NULL),
|
||||
|
@ -124,6 +128,7 @@ END_DECLARE_EVENT_TYPES()
|
|||
#define EVT_TASKBAR_BALLOON_HIDE(fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_TASKBAR_BALLOON_HIDE, -1, -1, (wxObjectEventFunction) (wxEventFunction) &fn, NULL),
|
||||
#define EVT_TASKBAR_BALLOON_TIMEOUT(fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_TASKBAR_BALLOON_TIMEOUT, -1, -1, (wxObjectEventFunction) (wxEventFunction) &fn, NULL),
|
||||
#define EVT_TASKBAR_CONTEXT_USERCLICK(fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_TASKBAR_BALLOON_USERCLICK, -1, -1, (wxObjectEventFunction) (wxEventFunction) &fn, NULL),
|
||||
#define EVT_TASKBAR_SHUTDOWN(fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_TASKBAR_SHUTDOWN, -1, -1, (wxObjectEventFunction) (wxEventFunction) &fn, NULL),
|
||||
|
||||
|
||||
#endif
|
||||
|
|
Binary file not shown.
|
@ -0,0 +1,145 @@
|
|||
// ShutdownBOINCManager.cpp : Defines the entry point for the DLL application.
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
|
||||
BOOL APIENTRY DllMain( HANDLE hModule,
|
||||
DWORD ul_reason_for_call,
|
||||
LPVOID lpReserved
|
||||
)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Function: LogError
|
||||
//
|
||||
// Description: This function writes to the MSI log file and displays
|
||||
// the SetupError dialog box as appropriate.
|
||||
//
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
int LogError(
|
||||
MSIHANDLE hInstall, // handle to the installation session
|
||||
UINT msgType, // message type to send to Windows Installer
|
||||
UINT pbStyle, // push button sstyle to use in message box
|
||||
UINT iconStyle, // icon style to use in message box
|
||||
int errNum, // number of error in Error table
|
||||
TCHAR* ActionName, // name of the custom action causing error
|
||||
TCHAR* ErrorDesc, // description of the error
|
||||
int statuscode // the return value from an api
|
||||
)
|
||||
{
|
||||
PMSIHANDLE hRec; // handle to a record object
|
||||
TCHAR frmtString[4096]; // string to use in field 0
|
||||
|
||||
switch(msgType)
|
||||
{
|
||||
// Send informational message to the log file
|
||||
case INSTALLMESSAGE_INFO:
|
||||
// generate the format string for field 0
|
||||
_tcscpy(frmtString, _T("Custom Message : "));
|
||||
_tcscat(frmtString, _T("Action Name: [1] "));
|
||||
_tcscat(frmtString, _T("Description: [2] "));
|
||||
_tcscat(frmtString, _T("Status Code: [3] "));
|
||||
|
||||
hRec = MsiCreateRecord(3);
|
||||
|
||||
MsiRecordSetString(hRec, 0, frmtString);
|
||||
MsiRecordSetString(hRec, 1, ActionName);
|
||||
MsiRecordSetString(hRec, 2, ErrorDesc);
|
||||
MsiRecordSetInteger(hRec, 3, statuscode);
|
||||
|
||||
// returns IDOK if successful
|
||||
return (MsiProcessMessage(hInstall, INSTALLMESSAGE_INFO,
|
||||
hRec));
|
||||
break;
|
||||
|
||||
// Display a dialog and send error message to log file
|
||||
case INSTALLMESSAGE_ERROR:
|
||||
case INSTALLMESSAGE_WARNING:
|
||||
case INSTALLMESSAGE_USER:
|
||||
hRec = MsiCreateRecord(4);
|
||||
|
||||
MsiRecordSetInteger(hRec, 1, errNum);
|
||||
MsiRecordSetString(hRec, 2, ActionName);
|
||||
MsiRecordSetString(hRec, 3, ErrorDesc);
|
||||
MsiRecordSetInteger(hRec, 4, statuscode);
|
||||
|
||||
// Return value to indicate which button is
|
||||
// pushed on message box
|
||||
return (MsiProcessMessage(hInstall,
|
||||
INSTALLMESSAGE(msgType|pbStyle|iconStyle), hRec));
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Function: ShutdownBOINCManager
|
||||
//
|
||||
// Description: This custom action shuts down the BOINC Manager.
|
||||
//
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
UINT __stdcall ShutdownBOINCManager(MSIHANDLE hInstall)
|
||||
{
|
||||
HWND hWndBOINCManagerSystray = NULL;
|
||||
LRESULT lrReturnValue = NULL;
|
||||
UINT uiLoopCounter = 0;
|
||||
UINT uiReturn = -1;
|
||||
|
||||
const UINT WM_TASKBARSHUTDOWN = ::RegisterWindowMessage(_T("TaskbarShutdown"));
|
||||
|
||||
do
|
||||
{
|
||||
hWndBOINCManagerSystray = FindWindow( _T("wxTaskBarExWindowClass"), _T("BOINCManagerSystray") );
|
||||
if ( NULL != hWndBOINCManagerSystray )
|
||||
{
|
||||
lrReturnValue = SendMessage( hWndBOINCManagerSystray, WM_TASKBARSHUTDOWN, NULL, NULL );
|
||||
if ( 0 != lrReturnValue )
|
||||
{
|
||||
LogError(
|
||||
hInstall,
|
||||
INSTALLMESSAGE_ERROR,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
_T("ShutdownBOINCManager"),
|
||||
_T("Setup was unable to shutdown the BOINC Manager Systray window."),
|
||||
(int)lrReturnValue
|
||||
);
|
||||
return ERROR_INSTALL_FAILURE;
|
||||
}
|
||||
Sleep(1000);
|
||||
}
|
||||
uiLoopCounter++;
|
||||
}
|
||||
while ( (NULL != hWndBOINCManagerSystray) && ( 20 >= uiLoopCounter ) );
|
||||
|
||||
if ( NULL != hWndBOINCManagerSystray )
|
||||
{
|
||||
LogError(
|
||||
hInstall,
|
||||
INSTALLMESSAGE_ERROR,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
_T("ShutdownBOINCManager"),
|
||||
_T("One or more BOINC Manager applications could not be closed, please close them and then rerun setup."),
|
||||
uiLoopCounter
|
||||
);
|
||||
return ERROR_INSTALL_FAILURE;
|
||||
}
|
||||
|
||||
// Give the manager a few seconds to shutdown.
|
||||
Sleep(5000);
|
||||
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
const char *BOINC_RCSID_eeaf7c4c79 = "$Id$";
|
|
@ -0,0 +1,8 @@
|
|||
;
|
||||
; Module definition file for the shutdown.dll
|
||||
;
|
||||
|
||||
LIBRARY shutdown
|
||||
|
||||
EXPORTS
|
||||
ShutdownBOINCManager PRIVATE
|
|
@ -0,0 +1,21 @@
|
|||
Microsoft Visual Studio Solution File, Format Version 8.00
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ShutdownBOINCManager", "ShutdownBOINCManager.vcproj", "{49723CA5-DA05-43C0-93AB-6FD30D046919}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfiguration) = preSolution
|
||||
Debug = Debug
|
||||
Release = Release
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfiguration) = postSolution
|
||||
{49723CA5-DA05-43C0-93AB-6FD30D046919}.Debug.ActiveCfg = Debug|Win32
|
||||
{49723CA5-DA05-43C0-93AB-6FD30D046919}.Debug.Build.0 = Debug|Win32
|
||||
{49723CA5-DA05-43C0-93AB-6FD30D046919}.Release.ActiveCfg = Release|Win32
|
||||
{49723CA5-DA05-43C0-93AB-6FD30D046919}.Release.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityAddIns) = postSolution
|
||||
EndGlobalSection
|
||||
EndGlobal
|
|
@ -0,0 +1,161 @@
|
|||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="7.10"
|
||||
Name="ShutdownBOINCManager"
|
||||
ProjectGUID="{49723CA5-DA05-43C0-93AB-6FD30D046919}"
|
||||
Keyword="Win32Proj">
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"/>
|
||||
</Platforms>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="Debug"
|
||||
IntermediateDirectory="Debug"
|
||||
ConfigurationType="2"
|
||||
CharacterSet="1">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SHUTDOWN_EXPORTS"
|
||||
MinimalRebuild="TRUE"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="1"
|
||||
UsePrecompiledHeader="3"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="TRUE"
|
||||
DebugInformationFormat="4"/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="msi.lib"
|
||||
OutputFile="$(OutDir)/shutdown.dll"
|
||||
LinkIncremental="2"
|
||||
ModuleDefinitionFile="ShutdownBOINCManager.def"
|
||||
GenerateDebugInformation="TRUE"
|
||||
ProgramDatabaseFile="$(OutDir)/shutdown.pdb"
|
||||
SubSystem="2"
|
||||
ImportLibrary="$(OutDir)/shutdown.lib"
|
||||
TargetMachine="1"/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"/>
|
||||
<Tool
|
||||
Name="VCManagedWrapperGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="Release"
|
||||
IntermediateDirectory="Release"
|
||||
ConfigurationType="2"
|
||||
CharacterSet="1">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
InlineFunctionExpansion="1"
|
||||
OmitFramePointers="TRUE"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SHUTDOWN_EXPORTS"
|
||||
StringPooling="TRUE"
|
||||
RuntimeLibrary="0"
|
||||
EnableFunctionLevelLinking="TRUE"
|
||||
UsePrecompiledHeader="3"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="TRUE"
|
||||
DebugInformationFormat="3"/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="msi.lib"
|
||||
OutputFile="$(OutDir)/shutdown.dll"
|
||||
LinkIncremental="1"
|
||||
ModuleDefinitionFile="ShutdownBOINCManager.def"
|
||||
GenerateDebugInformation="TRUE"
|
||||
SubSystem="2"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
ImportLibrary="$(OutDir)/shutdown.lib"
|
||||
TargetMachine="1"/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"/>
|
||||
<Tool
|
||||
Name="VCManagedWrapperGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm">
|
||||
<File
|
||||
RelativePath="ShutdownBOINCManager.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="ShutdownBOINCManager.def">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="stdafx.cpp">
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
UsePrecompiledHeader="1"/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
UsePrecompiledHeader="1"/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl;inc">
|
||||
<File
|
||||
RelativePath="stdafx.h">
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
|
@ -0,0 +1,10 @@
|
|||
// stdafx.cpp : source file that includes just the standard includes
|
||||
// NativeImage.pch will be the pre-compiled header
|
||||
// stdafx.obj will contain the pre-compiled type information
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
// TODO: reference any additional headers you need in STDAFX.H
|
||||
// and not in this file
|
||||
|
||||
const char *BOINC_RCSID_140925f16d = "$Id$";
|
|
@ -0,0 +1,22 @@
|
|||
// stdafx.h : include file for standard system include files,
|
||||
// or project specific include files that are used frequently, but
|
||||
// are changed infrequently
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
// Need to specify the smallest version of Windows Installer
|
||||
// that supports file hashing. This is version 2.0.
|
||||
#define _WIN32_MSI 200
|
||||
|
||||
// Exclude rarely-used stuff from Windows headers
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
|
||||
|
||||
// Windows Header Files:
|
||||
#include <windows.h>
|
||||
#include <tchar.h>
|
||||
#include <malloc.h>
|
||||
#include <stdio.h>
|
||||
#include <msiquery.h>
|
||||
#include <ntsecapi.h>
|
Binary file not shown.
Loading…
Reference in New Issue