You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
2.6 KiB
124 lines
2.6 KiB
#include "stdafx.h"
|
|
|
|
#include "WizardSheet.h"
|
|
|
|
LRESULT CWelcomePage::OnInitDialog( UINT, WPARAM, LPARAM, BOOL& )
|
|
{
|
|
// Set the fonts
|
|
SetWindowFont( GetDlgItem( IDC_TITLE ), m_pTheSheet->m_fontTitles.get(), FALSE );
|
|
SetWindowFont( GetDlgItem( IDC_TIP ), m_pTheSheet->m_fontBold.get(), FALSE );
|
|
|
|
// Center the property sheet on the screen
|
|
CWindow wnd( m_pTheSheet->m_hWnd );
|
|
wnd.CenterWindow();
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
BOOL CWelcomePage::OnSetActive()
|
|
{
|
|
if ( CanRun() )
|
|
{
|
|
SetWizardButtons( PSWIZB_NEXT );
|
|
}
|
|
else
|
|
{
|
|
::ShowWindow( GetDlgItem( IDC_ERRORICON ), SW_SHOW );
|
|
::ShowWindow( GetDlgItem( IDC_ERROR ), SW_SHOW );
|
|
::ShowWindow( GetDlgItem( IDC_TIP ), SW_HIDE );
|
|
|
|
SetWizardButtons( 0 );
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
|
|
bool CWelcomePage::CanRun()
|
|
{
|
|
UINT nResID = 0;
|
|
|
|
if ( !IsAdmin() )
|
|
{
|
|
nResID = IDS_E_NOTADMIN;
|
|
}
|
|
else if ( !IsIISRunning() )
|
|
{
|
|
nResID = IDS_E_NOIIS;
|
|
}
|
|
|
|
if ( nResID != 0 )
|
|
{
|
|
CString strText;
|
|
strText.LoadString( nResID );
|
|
|
|
::SetWindowText( GetDlgItem( IDC_ERROR ), strText );
|
|
}
|
|
|
|
return ( nResID == 0 );
|
|
}
|
|
|
|
|
|
|
|
bool CWelcomePage::IsAdmin()
|
|
{
|
|
BOOL bIsAdmin = FALSE;
|
|
SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
|
|
PSID AdminSid = { 0 };
|
|
|
|
if ( ::AllocateAndInitializeSid( &NtAuthority,
|
|
2, // Number of subauthorities
|
|
SECURITY_BUILTIN_DOMAIN_RID,
|
|
DOMAIN_ALIAS_RID_ADMINS,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
&AdminSid ) )
|
|
{
|
|
if ( !::CheckTokenMembership( NULL, AdminSid, &bIsAdmin ) )
|
|
{
|
|
bIsAdmin = FALSE;
|
|
}
|
|
}
|
|
|
|
::GlobalFree( AdminSid );
|
|
|
|
return ( bIsAdmin != FALSE );
|
|
}
|
|
|
|
|
|
|
|
bool CWelcomePage::IsIISRunning()
|
|
{
|
|
bool bResult = false;
|
|
|
|
LPCWSTR SERVICE_NAME = L"IISADMIN";
|
|
|
|
// Open the SCM on the local machine
|
|
SC_HANDLE schSCManager = ::OpenSCManagerW( NULL, NULL, SC_MANAGER_ALL_ACCESS );
|
|
_ASSERT( schSCManager != NULL ); // We alredy checked that we are Admins
|
|
|
|
SC_HANDLE schService = ::OpenServiceW( schSCManager, SERVICE_NAME, SERVICE_QUERY_STATUS );
|
|
|
|
// The service is not installed
|
|
if ( schService != NULL )
|
|
{
|
|
SERVICE_STATUS ssStatus;
|
|
|
|
VERIFY( ::QueryServiceStatus( schService, &ssStatus ) );
|
|
|
|
bResult = ( ssStatus.dwCurrentState == SERVICE_RUNNING );
|
|
|
|
VERIFY( ::CloseServiceHandle( schService ) );
|
|
}
|
|
|
|
VERIFY( ::CloseServiceHandle( schSCManager ) );
|
|
|
|
return bResult;
|
|
}
|