|
|
// Copyright (c) 1997-2001 Microsoft Corporation
//
// File: WelcomePage.cpp
//
// Synopsis: Defines Welcome Page for the CYS
// Wizard
//
// History: 02/03/2001 JeffJon Created
#include "pch.h"
#include "resource.h"
#include "InstallationUnitProvider.h"
#include "WelcomePage.h"
#include "state.h"
#include "Dialogs.h"
static PCWSTR WELCOME_PAGE_HELP = L"cys.chm::/cys_topnode.htm";
WelcomePage::WelcomePage() : CYSWizardPage( IDD_WELCOME_PAGE, IDS_WELCOME_TITLE, IDS_WELCOME_SUBTITLE, WELCOME_PAGE_HELP, true, false) { LOG_CTOR(WelcomePage); }
WelcomePage::~WelcomePage() { LOG_DTOR(WelcomePage); }
void WelcomePage::OnInit() { LOG_FUNCTION(WelcomePage::OnInit);
SetLargeFont(hwnd, IDC_BIG_BOLD_TITLE);
Win::PropSheet_SetTitle( Win::GetParent(hwnd), 0, String::load(IDS_WIZARD_TITLE));
// Check to see if we are in a reboot scenario
String homeKeyValue; if (State::GetInstance().GetHomeRegkey(homeKeyValue)) { if (homeKeyValue.icompare(CYS_HOME_REGKEY_TERMINAL_SERVER_VALUE) == 0) { TerminalServerPostBoot(); } else if (homeKeyValue.icompare(CYS_HOME_REGKEY_TERMINAL_SERVER_OPTIMIZED) == 0) { TerminalServerPostBoot(false); } else if (homeKeyValue.icompare(CYS_HOME_REGKEY_FIRST_SERVER_VALUE) == 0) { FirstServerPostBoot(); } else if (homeKeyValue.icompare(CYS_HOME_REGKEY_DCPROMO_VALUE) == 0) { DCPromoPostBoot(); }
// Now set the home regkey back to "home" so that we won't run
// through these again
if (homeKeyValue.icompare(CYS_HOME_REGKEY_DEFAULT_VALUE) != 0) { bool result = State::GetInstance().SetHomeRegkey(CYS_HOME_REGKEY_DEFAULT_VALUE);
ASSERT(result); }
// Reset the must run key now that we have done the reboot stuff
bool regkeyResult = SetRegKeyValue( CYS_HOME_REGKEY, CYS_HOME_REGKEY_MUST_RUN, CYS_HOME_RUN_KEY_DONT_RUN, HKEY_LOCAL_MACHINE, true); ASSERT(regkeyResult); }
}
void WelcomePage::TerminalServerPostBoot(bool installed) { LOG_FUNCTION(WelcomePage::TerminalServerPostBoot);
// Create the log file
String logName; HANDLE logfileHandle = AppendLogFile( CYS_LOGFILE_NAME, logName); if (logfileHandle) { LOG(String::format(L"New log file was created: %1", logName.c_str())); } else { LOG(L"Unable to create the log file!!!"); }
// Prepare the finish dialog
FinishDialog dialog( logName, InstallationUnitProvider::GetInstance().GetApplicationInstallationUnit().GetFinishHelp());
if (installed) { if (InstallationUnitProvider::GetInstance().GetApplicationInstallationUnit().GetApplicationMode() == 1) { CYS_APPEND_LOG(String::load(IDS_LOG_APP_REBOOT_SUCCESS));
// Prompt the user to show help or log file
dialog.ModalExecute(hwnd); } else { // Failed to install TS
CYS_APPEND_LOG(String::load(IDS_LOG_APP_REBOOT_FAILED));
dialog.OpenLogFile(); } } else { // Since all we did is optimize we should always be successful on reboot
dialog.ModalExecute(hwnd); } }
void WelcomePage::FirstServerPostBoot() { LOG_FUNCTION(WelcomePage::FirstServerPostBoot);
// Create the log file
String logName; HANDLE logfileHandle = AppendLogFile( CYS_LOGFILE_NAME, logName); if (logfileHandle) { LOG(String::format(L"New log file was created: %1", logName.c_str())); } else { LOG(L"Unable to create the log file!!!"); }
// Verify the machine is a DC
do { if (State::GetInstance().IsDC()) { // Authorize the new DHCP scope
String dnsName = Win::GetComputerNameEx(ComputerNameDnsFullyQualified);
if (InstallationUnitProvider::GetInstance().GetDHCPInstallationUnit().AuthorizeDHCPScope(dnsName)) { LOG(L"DHCP scope successfully authorized");
CYS_APPEND_LOG(String::load(IDS_LOG_DHCP_AUTHORIZATION_SUCCEEDED)); } else { LOG(L"DHCP scope authorization failed");
String failureMessage = String::load(IDS_LOG_DHCP_AUTHORIZATION_FAILED); CYS_APPEND_LOG(failureMessage);
Win::MessageBox( hwnd, failureMessage, String::load(IDS_WIZARD_TITLE), MB_OK); }
// Do TAPI config
if (State::GetInstance().IsFirstDC()) { HRESULT hr = InstallationUnitProvider::GetInstance().GetExpressInstallationUnit().DoTapiConfig(dnsName); if (SUCCEEDED(hr)) { LOG(L"TAPI config succeeded");
CYS_APPEND_LOG(String::load(IDS_LOG_TAPI_CONFIG_SUCCEEDED)); CYS_APPEND_LOG( String::format( String::load(IDS_LOG_TAPI_CONFIG_SUCCEEDED_FORMAT), dnsName.c_str())); } else { LOG(L"TAPI config failed");
CYS_APPEND_LOG( String::format( String::load(IDS_LOG_TAPI_CONFIG_FAILED_FORMAT), hr)); } }
// Show dialog that lets the user open help or the log file
} else { LOG(L"DCPromo failed on reboot");
CYS_APPEND_LOG(String::load(IDS_LOG_DCPROMO_REBOOT_FAILED)); break; } } while (false); }
void WelcomePage::DCPromoPostBoot() { LOG_FUNCTION(WelcomePage::DCPromoPostBoot);
// Create the log file
String logName; HANDLE logfileHandle = AppendLogFile( CYS_LOGFILE_NAME, logName); if (logfileHandle) { LOG(String::format(L"New log file was created: %1", logName.c_str())); } else { LOG(L"Unable to create the log file!!!"); ASSERT(false); }
// Prepare the finish dialog
FinishDialog dialog( logName, InstallationUnitProvider::GetInstance().GetADInstallationUnit().GetFinishHelp());
CYS_APPEND_LOG(String::load(IDS_LOG_DOMAIN_CONTROLLER_HEADING)); CYS_APPEND_LOG(String::load(IDS_LOG_DOMAIN_CONTROLLER_INSTALL));
if (State::GetInstance().IsDC()) { CYS_APPEND_LOG(String::load(IDS_LOG_DOMAIN_CONTROLLER_SUCCESS));
// Show the log/help dialog
dialog.ModalExecute(hwnd); } else { CYS_APPEND_LOG(String::load(IDS_LOG_DOMAIN_CONTROLLER_FAILED));
// just open the log
dialog.OpenLogFile(); } }
bool WelcomePage::OnSetActive() { LOG_FUNCTION(WelcomePage::OnSetActive);
// Only Next and Cancel are available from the Welcome page
Win::PropSheet_SetWizButtons(Win::GetParent(hwnd), PSWIZB_NEXT);
return true; }
int WelcomePage::Validate() { LOG_FUNCTION(WelcomePage::Validate);
// For now, just initialize the state object and then
// go directly to the custom server page. Eventually
// we will figure out what we want express path to do
// and then we will have to delay retrieving machine
// info and go to the BeforeBeginPage.
// Gather the machine network and role information
State& state = State::GetInstance();
if (!state.HasStateBeenRetrieved()) { if (!state.RetrieveMachineConfigurationInformation(hwnd)) { ASSERT(false); LOG(L"The machine configuration could not be retrieved."); return -1; } }
int nextPage = IDD_CUSTOM_SERVER_PAGE; do { if (state.GetNICCount() != 1) { LOG(String::format( L"GetNICCount() = %1!d!", state.GetNICCount())); break; }
if (state.IsDC()) { LOG(L"Computer is DC"); break; }
if (InstallationUnitProvider::GetInstance().GetDNSInstallationUnit().IsServiceInstalled()) { LOG(L"Computer is DNS server"); break; }
if (InstallationUnitProvider::GetInstance().GetDHCPInstallationUnit().IsServiceInstalled()) { LOG(L"Computer is DHCP server"); break; }
if (state.IsDHCPServerAvailable()) { LOG(L"DHCP server found on the network"); break; }
nextPage = IDD_DECISION_PAGE;
} while (false);
LOG(String::format( L"nextPage = %1!d!", nextPage));
return nextPage;
}
|