|
|
/*++
Copyright (c) 2002 Microsoft Corporation
Module Name :
complus.hxx
Abstract:
Classes that are used to activate the COM+ and DTC components
Author:
Christopher Achille (cachille)
Project:
Internet Services Setup
Revision History: April 2002: Created
--*/
#include "stdafx.h"
#include "complus.hxx"
// Constructor
//
CCOMPlusInstallComponent::CCOMPlusInstallComponent(): m_hComSetupDll( NULL ) { }
// Destructor
//
CCOMPlusInstallComponent::~CCOMPlusInstallComponent() { if ( m_hComSetupDll == NULL ) { // Free the library
DBG_REQUIRE( m_hComSetupDll ); } }
// InitializeComSetupDll
//
// Initialize the Com Setup Dll
// This loads the dll, so that we can call the exported functions
// by it.
//
BOOL CCOMPlusInstallComponent::InitializeComSetupDll() { TSTR_PATH strPath;
if ( m_hComSetupDll != NULL ) { // Since this is already opened, lets return true
return TRUE; }
if ( !strPath.RetrieveSystemDir() || !strPath.PathAppend( STRING_SETUPFILES_LOCATION ) || !strPath.PathAppend( STRING_COMPLUS_SETUPDLL ) ) { // Log the error
iisDebugOut( ( LOG_TYPE_ERROR, _T("COMPlus setup, failed to construct path\n") ) );
return FALSE; }
m_hComSetupDll = LoadLibrary( strPath.QueryStr() );
if ( m_hComSetupDll == NULL ) { // Log the error
iisDebugOut( ( LOG_TYPE_ERROR, _T("COMPlus setup, failed to LoadLibrary on '%s'\n"), STRING_COMPLUS_SETUPDLL ) ); }
return ( m_hComSetupDll != NULL ); }
// InstallComponent
//
// Install or Uninstall the Component
//
// Parameters:
// bInstall - TRUE == Install
// FALSE == Uninstall
//
BOOL CCOMPlusInstallComponent::InstallComponent( BOOL bInstall ) { pComDtc_Set pfnInstall = NULL; HRESULT hr;
if ( !InitializeComSetupDll() ) { // Failed to initialize, bail
return FALSE; }
pfnInstall = (pComDtc_Set) GetProcAddress(m_hComSetupDll, STRING_COM_INSTALLFUNCTION );
if ( pfnInstall == NULL ) { // Log the error
iisDebugOut( ( LOG_TYPE_ERROR, _T("COMPlus Install/Uninstall call failed, could not find exported function. GLE=0x%8x\n"), GetLastError() ) );
return FALSE; }
hr = pfnInstall( bInstall ? TRUE : FALSE );
if ( FAILED( hr ) ) { // Log the error
iisDebugOut( ( LOG_TYPE_ERROR, _T("COMPlus Install/Uninstall call failed, hr=0x%8x\n"), hr ) ); }
return ( SUCCEEDED( hr ) ); }
// Install
//
// Install the COM+ Component
//
BOOL CCOMPlusInstallComponent::Install() { return InstallComponent( TRUE ); }
// PostUnInstall
//
// UnInstall the COM+ Component
// This must be done in OC_COMPLETE, so we are doing it in PostUninstall
//
BOOL CCOMPlusInstallComponent::PostUnInstall() { return InstallComponent( FALSE ); }
// IsInstalled
//
// Return if COM+ is installed
//
BOOL CCOMPlusInstallComponent::IsInstalled( LPBOOL pbIsInstalled ) { pComDtc_Get pfnIsInstalled = NULL; HRESULT hr;
ASSERT( pbIsInstalled );
if ( !InitializeComSetupDll() ) { // Failed to initialize, bail
return FALSE; }
pfnIsInstalled = (pComDtc_Get) GetProcAddress(m_hComSetupDll, STRING_COM_ISINSTALLEDFUNCTION );
if ( pfnIsInstalled == NULL ) { // Log the error
iisDebugOut( ( LOG_TYPE_ERROR, _T("COMPlus IsInstalled call failed, could not find exported function. GLE=0x%8x\n"), GetLastError() ) );
return FALSE; }
hr = pfnIsInstalled( &g_OCMInfo, pbIsInstalled );
if ( FAILED( hr ) ) { // Log the error
iisDebugOut( ( LOG_TYPE_ERROR, _T("COMPlus Install/Uninstall call failed, hr=0x%8x\n"), hr ) ); }
return ( SUCCEEDED( hr ) ); }
// GetFriendlyName
//
// Retrieve the FriendlyName of the COM+ Component
//
BOOL CCOMPlusInstallComponent::GetFriendlyName( TSTR *pstrFriendlyName ) { return pstrFriendlyName->LoadString( IDS_COMPLUS_COMPONETNAME ); }
// GetName
//
// Get the name of the component in the inf
//
LPTSTR CCOMPlusInstallComponent::GetName() { return g_ComponentList[ COMPONENT_COMPLUS ].szComponentName; }
// GetSmallIcon
//
// Retrieve the small icon for this OCM component
//
BOOL CCOMPlusInstallComponent::GetSmallIcon( HBITMAP *phIcon ) { *phIcon = LoadBitmap( (HINSTANCE) g_MyModuleHandle, MAKEINTRESOURCE( IDB_ICON_COMPLUS ));
return ( *phIcon != NULL ); }
// Constructor
//
CDTCInstallComponent::CDTCInstallComponent(): m_hDtcSetupDll( NULL ) { }
// Destructor
//
CDTCInstallComponent::~CDTCInstallComponent() { if ( m_hDtcSetupDll == NULL ) { // Free the library
DBG_REQUIRE( m_hDtcSetupDll != NULL ); } }
// InitializeComSetupDll
//
// Initialize the Com Setup Dll
// This loads the dll, so that we can call the exported functions
// by it.
//
BOOL CDTCInstallComponent::InitializeDtcSetupDll() { TSTR_PATH strPath;
if ( m_hDtcSetupDll != NULL ) { // Since this is already opened, lets return true
return TRUE; }
if ( !strPath.RetrieveSystemDir() || !strPath.PathAppend( STRING_SETUPFILES_LOCATION ) || !strPath.PathAppend( STRING_DTC_SETUPDLL ) ) { // Log the error
iisDebugOut( ( LOG_TYPE_ERROR, _T("DTC setup, failed to construct path\n") ) );
return FALSE; }
m_hDtcSetupDll = LoadLibrary( strPath.QueryStr() );
if ( m_hDtcSetupDll == NULL ) { // Log the error
iisDebugOut((LOG_TYPE_ERROR, _T("DTC setup, failed to LoadLibrary on '%s'\n"), STRING_COMPLUS_SETUPDLL ) ); }
return ( m_hDtcSetupDll != NULL ); }
// InstallComponent
//
// Install or Uninstall the Component
//
// Parameters:
// bInstall - TRUE == Install
// FALSE == Uninstall
//
BOOL CDTCInstallComponent::InstallComponent( BOOL bInstall ) { pComDtc_Set pfnInstall = NULL; HRESULT hr;
iisDebugOut((LOG_TYPE_PROGRAM_FLOW, _T("Calling InstallComponent\n")));
if ( !InitializeDtcSetupDll() ) { // Failed to initialize, bail
return FALSE; }
pfnInstall = (pComDtc_Set) GetProcAddress(m_hDtcSetupDll, STRING_DTC_INSTALLFUNCTION );
if ( pfnInstall == NULL ) { // Log the error
iisDebugOut( ( LOG_TYPE_ERROR, _T("DTC Install/Uninstall call failed, could not find exported function. GLE=0x%8x\n"), GetLastError() ) );
return FALSE; }
hr = pfnInstall( bInstall ? TRUE : FALSE );
if ( FAILED( hr ) ) { // Log the error
iisDebugOut( ( LOG_TYPE_ERROR, _T("DTC Install/Uninstall call failed, hr=0x%8x\n"), hr ) ); }
return ( SUCCEEDED( hr ) ); }
// Install
//
// Install the COM+ Component
//
BOOL CDTCInstallComponent::Install() { return InstallComponent( TRUE ); }
// PostUnInstall
//
// UnInstall the COM+ Component
// Because this needs to be done in OC_COMPLETE, we do it in
// PostUnInstall
//
BOOL CDTCInstallComponent::PostUnInstall() { return InstallComponent( FALSE ); }
// IsInstalled
//
// Return if DTC is installed
//
BOOL CDTCInstallComponent::IsInstalled( LPBOOL pbIsInstalled ) { pComDtc_Get pfnIsInstalled = NULL; HRESULT hr;
ASSERT( pbIsInstalled );
if ( !InitializeDtcSetupDll() ) { // Failed to initialize, bail
return FALSE; }
pfnIsInstalled = (pComDtc_Get) GetProcAddress(m_hDtcSetupDll, STRING_DTC_ISINSTALLEDFUNCTION );
if ( pfnIsInstalled == NULL ) { // Log the error
iisDebugOut( ( LOG_TYPE_ERROR, _T("DTC IsInstalled call failed, could not find exported function. GLE=0x%8x\n"), GetLastError() ) );
return FALSE; }
hr = pfnIsInstalled( &g_OCMInfo, pbIsInstalled );
if ( FAILED( hr ) ) { // Log the error
iisDebugOut( ( LOG_TYPE_ERROR, _T("DTC Install/Uninstall call failed, hr=0x%8x\n"), hr ) ); }
return ( SUCCEEDED( hr ) ); }
// GetFriendlyName
//
// Retrieve the FriendlyName of the DTC Component
//
BOOL CDTCInstallComponent::GetFriendlyName( TSTR *pstrFriendlyName ) { return pstrFriendlyName->LoadString( IDS_DTC_COMPONETNAME ); }
// GetName
//
// Get the name of the component in the inf
//
LPTSTR CDTCInstallComponent::GetName() { return g_ComponentList[ COMPONENT_DTC ].szComponentName; }
// GetSmallIcon
//
// Retrieve the small icon for this OCM component
//
BOOL CDTCInstallComponent::GetSmallIcon( HBITMAP *phIcon ) { *phIcon = LoadBitmap( (HINSTANCE) g_MyModuleHandle, MAKEINTRESOURCE( IDB_ICON_DTC ));
return ( *phIcon != NULL ); }
|