|
|
// Copyright (c) 1997-2001 Microsoft Corporation
//
// File: FinishPage.cpp
//
// Synopsis: Defines the Finish Page for the CYS
// wizard
//
// History: 02/03/2001 JeffJon Created
#include "pch.h"
#include "resource.h"
#include "InstallationUnitProvider.h"
#include "FinishPage.h"
#include "state.h"
#include "Dialogs.h"
FinishPage::FinishPage() : WizardPage(IDD_FINISH_PAGE, IDS_FINISH_TITLE, IDS_FINISH_SUBTITLE, false, true) { LOG_CTOR(FinishPage); }
FinishPage::~FinishPage() { LOG_DTOR(FinishPage); }
void FinishPage::OnInit() { LOG_FUNCTION(FinishPage::OnInit);
SetLargeFont(hwnd, IDC_BIG_BOLD_TITLE);
}
bool FinishPage::OnSetActive() { LOG_FUNCTION(FinishPage::OnSetActive); Win::PropSheet_SetWizButtons( Win::GetParent(hwnd), PSWIZB_FINISH | PSWIZB_BACK);
// Get the finish text from the installation unit and put it in the finish box
String message;
bool changes = InstallationUnitProvider::GetInstance().GetCurrentInstallationUnit().GetFinishText(message);
Win::SetDlgItemText(hwnd, IDC_FINISH_MESSAGE, message);
// set the rerun check box state
if (InstallationUnitProvider::GetInstance().GetCurrentInstallationUnit().GetInstallationUnitType() == DC_INSTALL || InstallationUnitProvider::GetInstance().GetCurrentInstallationUnit().GetInstallationUnitType() == EXPRESS_INSTALL) { // the wizard must be rerun when we are installing a DC
Win::ShowWindow( Win::GetDlgItem(hwnd, IDC_RERUN_CHECK), SW_HIDE);
Win::Button_SetCheck( Win::GetDlgItem(hwnd, IDC_RERUN_CHECK), BST_CHECKED);
Win::EnableWindow( Win::GetDlgItem(hwnd, IDC_RERUN_CHECK), false); } else { Win::ShowWindow( Win::GetDlgItem(hwnd, IDC_RERUN_CHECK), SW_SHOW);
Win::Button_SetCheck( Win::GetDlgItem(hwnd, IDC_RERUN_CHECK), State::GetInstance().RerunWizard() ? BST_CHECKED : BST_UNCHECKED);
Win::EnableWindow( Win::GetDlgItem(hwnd, IDC_RERUN_CHECK), true); }
if (!changes) { popup.MessageBox( hwnd, IDS_NO_CHANGES_MESSAGEBOX_TEXT, MB_OK | MB_ICONWARNING); } return true; }
bool FinishPage::OnHelp() { LOG_FUNCTION(FinishPage::OnHelp);
// NOTE: I am not using Win::HtmlHelp here so that the help
// is actually running in a different process. This
// allows us to close down CYS without closing the help
// window.
String commandline = L"hh.exe \"" + InstallationUnitProvider::GetInstance().GetCurrentInstallationUnit().GetFinishHelp() + L"\"";
HRESULT hr = MyCreateProcess(commandline); if (FAILED(hr)) { LOG(String::format( L"Failed to open help: hr = 0x%1!x!", hr)); } return true; }
bool FinishPage::OnWizFinish() { LOG_FUNCTION(FinishPage::OnWizFinish);
Win::WaitCursor wait; bool result = false;
// Get the rerun state
bool rerunWizard = Win::Button_GetCheck(Win::GetDlgItem(hwnd, IDC_RERUN_CHECK));
State::GetInstance().SetRerunWizard(rerunWizard);
// Open the log file and pass the handle to the installation unit
// 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!!!"); }
// Install the current Installation Unit. This may be one or more services depending on the
// path that was taken through the wizard
InstallationUnit& installationUnit = InstallationUnitProvider::GetInstance().GetCurrentInstallationUnit();
InstallationReturnType installResult = installationUnit.InstallService(logfileHandle, hwnd);
FinishDialog dialog(logName, installationUnit.GetFinishHelp());
if (INSTALL_SUCCESS == installResult) { LOG(L"Service installed successfully");
// Bring up finish dialog that allows the user to select to
// show help and/or the log file
dialog.ModalExecute(hwnd); } else if (INSTALL_NO_CHANGES == installResult || INSTALL_SUCCESS_REBOOT == installResult) { LOG(L"Service installed successfully"); LOG(L"Not logging results because reboot was initiated"); } else if (INSTALL_SUCCESS_PROMPT_REBOOT == installResult) { LOG(L"Service installed successfully"); LOG(L"Prompting user to reboot");
if (-1 == SetupPromptReboot( 0, hwnd, FALSE)) { LOG(String::format( L"Failed to reboot: hr = %1!x!", GetLastError())); }
// At this point the system should be shutting down
// so don't do anything else
} else { LOG(L"Service failed to install");
if (IDYES == popup.MessageBox( hwnd, String::load(IDS_FAILED_INSTALL), MB_YESNO | MB_ICONWARNING)) { dialog.OpenLogFile(); Win::SetForegroundWindow(hwnd); }
result = true; }
// Add an additional line at the end of the log file
// only if we are not rebooting. All the reboot
// scenarios require additional logging to the same
// entry.
if (installResult != INSTALL_SUCCESS_REBOOT) { CYS_APPEND_LOG(L"\r\n"); }
LOG_BOOL(result); Win::SetWindowLongPtr(hwnd, DWLP_MSGRESULT, result ? TRUE : FALSE);
if (!result) { // clean up the InstallationUnits so that all the data must be re-read if
// if CYS automatically restarts
InstallationUnitProvider::GetInstance().Destroy(); }
return true; }
bool FinishPage::OnQueryCancel() { LOG_FUNCTION(FinishPage::OnQueryCancel);
bool result = false;
// set the rerun state to false so the wizard doesn't
// just restart itself
State::GetInstance().SetRerunWizard(false);
Win::SetWindowLongPtr( hwnd, DWLP_MSGRESULT, result ? TRUE : FALSE);
return true; }
|