320 lines
8.1 KiB
C++
320 lines
8.1 KiB
C++
// Copyright (c) 2001 Microsoft Corporation
|
|
//
|
|
// File: InstallationUnit.h
|
|
//
|
|
// Synopsis: Declares an InstallationUnit
|
|
// An InstallationUnit represents a single
|
|
// entity that can be installed. (i.e. DHCP, IIS, etc.)
|
|
//
|
|
// History: 02/03/2001 JeffJon Created
|
|
|
|
#ifndef __CYS_SERVERATIONUNIT_H
|
|
#define __CYS_SERVERATIONUNIT_H
|
|
|
|
#include "pch.h"
|
|
|
|
#include "resource.h"
|
|
#include "InstallationProgressPage.h"
|
|
|
|
// These are the values that can be returned from
|
|
// InstallationUnit::InstallService()
|
|
|
|
typedef enum
|
|
{
|
|
INSTALL_SUCCESS,
|
|
INSTALL_FAILURE,
|
|
|
|
// this means that there should be no
|
|
// logging and reboot is handled by DCPromo
|
|
// or Terminal Services installation
|
|
|
|
INSTALL_SUCCESS_REBOOT,
|
|
|
|
// this means that the finish page should
|
|
// prompt the user to reboot
|
|
|
|
INSTALL_SUCCESS_PROMPT_REBOOT,
|
|
|
|
// this means that the operation requires
|
|
// a reboot but the user chose not to reboot
|
|
|
|
INSTALL_SUCCESS_NEEDS_REBOOT,
|
|
|
|
// this means that the operation failed but
|
|
// still requires a reboot and the user
|
|
// chose not to reboot
|
|
|
|
INSTALL_FAILURE_NEEDS_REBOOT,
|
|
|
|
// No changes were selected while going
|
|
// through the wizard
|
|
|
|
INSTALL_NO_CHANGES,
|
|
|
|
// Installation was cancelled
|
|
|
|
INSTALL_CANCELLED
|
|
|
|
} InstallationReturnType;
|
|
|
|
// These are the values that can be returned from
|
|
// InstallationUnit::UnInstallService()
|
|
|
|
typedef enum
|
|
{
|
|
UNINSTALL_SUCCESS,
|
|
UNINSTALL_FAILURE,
|
|
|
|
// this means that there should be no
|
|
// logging and reboot is handled by DCPromo
|
|
// or Terminal Services installation
|
|
|
|
UNINSTALL_SUCCESS_REBOOT,
|
|
|
|
// this means that the finish page should
|
|
// prompt the user to reboot
|
|
|
|
UNINSTALL_SUCCESS_PROMPT_REBOOT,
|
|
|
|
// this means that the operation succeeded
|
|
// and requires a reboot but the user chose
|
|
// not to reboot
|
|
|
|
UNINSTALL_SUCCESS_NEEDS_REBOOT,
|
|
|
|
// this means that the operation failed
|
|
// and requires a reboot but the user chose
|
|
// not to reboot
|
|
|
|
UNINSTALL_FAILURE_NEEDS_REBOOT,
|
|
|
|
// Uninstall was cancelled
|
|
|
|
UNINSTALL_CANCELLED,
|
|
|
|
// Some installation units do not have
|
|
// uninstalls (ie ExpressInstallationUnit)
|
|
|
|
UNINSTALL_NO_CHANGES
|
|
} UnInstallReturnType;
|
|
|
|
// This array of strings if for the UI log debugging only
|
|
// It should match the values in the InstallationReturnType
|
|
// or UninstallReturnType
|
|
// above. The values of the enums are used to index these arrays
|
|
|
|
extern String installReturnTypeStrings[];
|
|
extern String uninstallReturnTypeStrings[];
|
|
|
|
// These macros are used to make it easier to log the return value from
|
|
// the InstallService() and UnInstallService() methods. It takes an
|
|
// InstallationReturnType or UnInstallReturnType and uses that to index
|
|
// the appropriate array of strings (installReturnTypeStrings or
|
|
// uninstallReturnTypeStrings) to get a string that is then logged
|
|
// to the the UI debug logfile
|
|
|
|
#define LOG_INSTALL_RETURN(returnType) LOG(installReturnTypeStrings[returnType]);
|
|
#define LOG_UNINSTALL_RETURN(returnType) LOG(uninstallReturnTypeStrings[returnType]);
|
|
|
|
class InstallationUnit
|
|
{
|
|
public:
|
|
|
|
// Constructor
|
|
|
|
InstallationUnit(
|
|
unsigned int serviceNameID,
|
|
unsigned int serviceDescriptionID,
|
|
unsigned int finishPageTitleID,
|
|
unsigned int finishPageUninstallTitleID,
|
|
unsigned int finishPageMessageID,
|
|
unsigned int finishPageInstallFailedMessageID,
|
|
unsigned int finishPageUninstallMessageID,
|
|
unsigned int finishPageUninstallFailedMessageID,
|
|
unsigned int uninstallMilestonePageWarningID,
|
|
unsigned int uninstallMilestonePageCheckboxID,
|
|
const String finishPageHelpString,
|
|
const String installMilestoneHelpString,
|
|
const String afterFinishHelpString,
|
|
ServerRole newInstallType = NO_SERVER);
|
|
|
|
// Destructor
|
|
|
|
virtual
|
|
~InstallationUnit() {}
|
|
|
|
|
|
// Installation virtual method
|
|
|
|
virtual
|
|
InstallationReturnType
|
|
InstallService(HANDLE logfileHandle, HWND hwnd) = 0;
|
|
|
|
virtual
|
|
UnInstallReturnType
|
|
UnInstallService(HANDLE logfileHandle, HWND hwnd) = 0;
|
|
|
|
virtual
|
|
InstallationReturnType
|
|
CompletePath(HANDLE logfileHandle, HWND hwnd);
|
|
|
|
void
|
|
SetInstallResult(InstallationReturnType result);
|
|
|
|
InstallationReturnType
|
|
GetInstallResult() const;
|
|
|
|
void
|
|
SetUninstallResult(UnInstallReturnType result);
|
|
|
|
UnInstallReturnType
|
|
GetUnInstallResult() const;
|
|
|
|
void
|
|
SetInstalling(bool installRole);
|
|
|
|
bool
|
|
Installing() { return installing; }
|
|
|
|
virtual
|
|
void
|
|
DoPostInstallAction(HWND);
|
|
|
|
virtual
|
|
InstallationStatus
|
|
GetStatus();
|
|
|
|
virtual
|
|
bool
|
|
IsServiceInstalled();
|
|
|
|
// Return true if the installation unit will make some
|
|
// changes during InstallService. Return false if
|
|
// if it will not
|
|
|
|
virtual
|
|
bool
|
|
GetMilestoneText(String& message) = 0;
|
|
|
|
virtual
|
|
bool
|
|
GetUninstallMilestoneText(String& message) = 0;
|
|
|
|
virtual
|
|
String
|
|
GetUninstallWarningText();
|
|
|
|
virtual
|
|
String
|
|
GetUninstallCheckboxText();
|
|
|
|
virtual
|
|
String
|
|
GetFinishText();
|
|
|
|
virtual
|
|
String
|
|
GetFinishTitle();
|
|
|
|
// Data accessors
|
|
|
|
virtual
|
|
String
|
|
GetServiceName();
|
|
|
|
virtual
|
|
String
|
|
GetServiceDescription();
|
|
|
|
virtual
|
|
String
|
|
GetFinishHelp();
|
|
|
|
virtual
|
|
String
|
|
GetMilestonePageHelp();
|
|
|
|
virtual
|
|
String
|
|
GetAfterFinishHelp();
|
|
|
|
ServerRole
|
|
GetServerRole() { return role; }
|
|
|
|
virtual
|
|
int
|
|
GetWizardStart();
|
|
|
|
// This is called from the CustomServerPage in response to
|
|
// a link in the description text being selected
|
|
//
|
|
// linkIndex - the index of the link in the description
|
|
// as defined by the SysLink control
|
|
// hwnd - HWND of the CustomServerPage
|
|
|
|
virtual
|
|
void
|
|
ServerRoleLinkSelected(int /*linkIndex*/, HWND /*hwnd*/) {};
|
|
|
|
// This is called from the FinishPage in response to
|
|
// a link in the message text being selected
|
|
//
|
|
// linkIndex - the index of the link in the message
|
|
// as defined by the SysLink control
|
|
// hwnd - HWND of the FinishPage
|
|
|
|
virtual
|
|
void
|
|
FinishLinkSelected(int /*inkIndex*/, HWND /*hwnd*/) {};
|
|
|
|
// This is called from the Milestone pages to see if the
|
|
// installer is already running. The default behavior
|
|
// is to check to see if the Windows Setup Wizard is
|
|
// running and popup an error if it is. This function
|
|
// will return true if the installer is already in use.
|
|
// Override this function in the subclasses to check a
|
|
// different installer (ie DCPromo.exe for the AD role)
|
|
// or popup a different message.
|
|
//
|
|
// hwnd - wizard page HWND
|
|
|
|
virtual
|
|
bool
|
|
DoInstallerCheck(HWND hwnd) const;
|
|
|
|
protected:
|
|
|
|
void
|
|
UpdateInstallationProgressText(
|
|
HWND hwnd,
|
|
unsigned int messageID);
|
|
|
|
String name;
|
|
String description;
|
|
String finishHelp;
|
|
String milestoneHelp;
|
|
String afterFinishHelp;
|
|
|
|
unsigned int nameID;
|
|
unsigned int descriptionID;
|
|
unsigned int finishTitleID;
|
|
unsigned int finishUninstallTitleID;
|
|
unsigned int finishMessageID;
|
|
unsigned int finishInstallFailedMessageID;
|
|
unsigned int finishUninstallMessageID;
|
|
unsigned int finishUninstallFailedMessageID;
|
|
unsigned int uninstallMilestoneWarningID;
|
|
unsigned int uninstallMilestoneCheckboxID;
|
|
|
|
bool installing;
|
|
|
|
private:
|
|
|
|
InstallationReturnType installationResult;
|
|
UnInstallReturnType uninstallResult;
|
|
|
|
ServerRole role;
|
|
};
|
|
|
|
|
|
#endif // __CYS_SERVERATIONUNIT_H
|