161 lines
2.8 KiB
C++
161 lines
2.8 KiB
C++
//=======================================================================
|
|
//
|
|
// Copyright (c) 1999 Microsoft Corporation. All Rights Reserved.
|
|
//
|
|
// File: callback.cpp
|
|
//
|
|
// Purpose: INSENG callback implementation
|
|
//
|
|
// History: 19-jan-99 YAsmi Created
|
|
//
|
|
//=======================================================================
|
|
|
|
#include "callback.h"
|
|
|
|
|
|
CInstallEngineCallback::CInstallEngineCallback()
|
|
{
|
|
m_cRef = 0;
|
|
m_pProgress = NULL;
|
|
m_pEngine = NULL;
|
|
Reset();
|
|
}
|
|
|
|
|
|
void CInstallEngineCallback::Reset()
|
|
{
|
|
m_dwInstallStatus = 0;
|
|
m_dwPhase = INSTALLSTATUS_INITIALIZING;
|
|
m_hResult = NOERROR;
|
|
m_bAborted = FALSE;
|
|
}
|
|
|
|
|
|
|
|
//
|
|
//IUnknown
|
|
//
|
|
STDMETHODIMP_(ULONG) CInstallEngineCallback::AddRef()
|
|
{
|
|
return ++m_cRef;
|
|
}
|
|
|
|
|
|
STDMETHODIMP_(ULONG) CInstallEngineCallback::Release()
|
|
{
|
|
if (--m_cRef != 0)
|
|
return m_cRef;
|
|
|
|
//we don't delete the object here because we want the client of the object to explicitly delete it
|
|
return 0;
|
|
}
|
|
|
|
|
|
STDMETHODIMP CInstallEngineCallback::QueryInterface(REFIID riid, void** ppv)
|
|
{
|
|
*ppv = NULL;
|
|
|
|
if((riid == IID_IUnknown) || (riid == IID_IInstallEngineCallback))
|
|
*ppv = this;
|
|
|
|
if(*ppv == NULL)
|
|
return E_NOINTERFACE;
|
|
|
|
((LPUNKNOWN)*ppv)->AddRef();
|
|
return NOERROR;
|
|
}
|
|
|
|
|
|
//
|
|
//IInstallEngineCallback
|
|
//
|
|
STDMETHODIMP CInstallEngineCallback::OnComponentProgress(LPCSTR pszID, DWORD dwPhase, LPCSTR pszString, LPCSTR pszMsgString, ULONG ulSofar, ULONG ulMax)
|
|
{
|
|
|
|
/*
|
|
if(dwPhase == INSTALLSTATUS_RUNNING)
|
|
_pProgDlg->SetInsProgress(ulSofar);
|
|
*/
|
|
|
|
m_dwPhase = dwPhase;
|
|
|
|
if (m_pProgress != NULL)
|
|
{
|
|
//
|
|
// check for cancel
|
|
//
|
|
if (m_pEngine != NULL)
|
|
{
|
|
if (!m_bAborted)
|
|
{
|
|
if (WaitForSingleObject(m_pProgress->GetCancelEvent(), 0) == WAIT_OBJECT_0)
|
|
m_bAborted = TRUE;
|
|
}
|
|
|
|
if (m_bAborted)
|
|
{
|
|
//
|
|
// keep telling the engine to abort
|
|
//
|
|
m_pEngine->Abort(0);
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
return NOERROR;
|
|
}
|
|
|
|
|
|
|
|
STDMETHODIMP CInstallEngineCallback::OnStopComponent(LPCSTR pszID, HRESULT hrError, DWORD dwPhase, LPCSTR pszString, DWORD dwStatus)
|
|
{
|
|
return NOERROR;
|
|
}
|
|
|
|
|
|
STDMETHODIMP CInstallEngineCallback::OnEngineStatusChange(DWORD dwEngineStatus, DWORD sub)
|
|
{
|
|
|
|
return NOERROR;
|
|
}
|
|
|
|
|
|
|
|
|
|
STDMETHODIMP CInstallEngineCallback::OnStartInstall(DWORD dwDLSize, DWORD dwTotalSize)
|
|
{
|
|
/*
|
|
if(_pProgDlg)
|
|
_pProgDlg->SetInsProgGoal(dwTotalSize);
|
|
*/
|
|
return NOERROR;
|
|
}
|
|
|
|
|
|
STDMETHODIMP CInstallEngineCallback::OnStartComponent(LPCSTR pszID, DWORD dwDLSize,
|
|
DWORD dwInstallSize, LPCSTR pszName)
|
|
{
|
|
/*
|
|
_strCurrentName = BSTRFROMANSI(pszName);
|
|
*/
|
|
return NOERROR;
|
|
}
|
|
|
|
|
|
|
|
STDMETHODIMP CInstallEngineCallback::OnEngineProblem(DWORD dwProblem, LPDWORD pdwAction)
|
|
{
|
|
return S_OK;
|
|
}
|
|
|
|
|
|
STDMETHODIMP CInstallEngineCallback::OnStopInstall(HRESULT hrError, LPCSTR szError, DWORD dwStatus)
|
|
{
|
|
|
|
m_hResult = hrError;
|
|
m_dwInstallStatus = dwStatus;
|
|
|
|
return NOERROR;
|
|
}
|