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.
274 lines
7.5 KiB
274 lines
7.5 KiB
//----------------------------------------------------------------------------
|
|
//
|
|
// Copyright (c) 1997-1999 Microsoft Corporation
|
|
// All rights reserved.
|
|
//
|
|
// File Name:
|
|
// product.c
|
|
//
|
|
// Description:
|
|
// This is the dlgproc for the Product page IDD_PRODUCT. It asks
|
|
// if your installing unattended/remote_install etc...
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#include "pch.h"
|
|
#include "resource.h"
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: SetDistFolderNames
|
|
//
|
|
// Purpose: Sets the values for the distribution folder name and share name
|
|
// in the global variables depending on the product selection.
|
|
//
|
|
// Arguments: INT nProductToInstall
|
|
//
|
|
// Returns: VOID
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
static VOID
|
|
SetDistFolderNames( INT nProductToInstall ) {
|
|
|
|
INT iNumberOfCharsCopied;
|
|
TCHAR chSystemDrive;
|
|
TCHAR szWindowsPath[MAX_PATH] = _T("");
|
|
TCHAR szDistFolderPath[MAX_PATH] = _T("");
|
|
HRESULT hrCat;
|
|
|
|
iNumberOfCharsCopied = GetWindowsDirectory( szWindowsPath, MAX_PATH );
|
|
|
|
if( iNumberOfCharsCopied != 0 ) {
|
|
szDistFolderPath[0] = szWindowsPath[0];
|
|
szDistFolderPath[1] = _T('\0');
|
|
}
|
|
else {
|
|
//
|
|
// Just guess it is the C drive if the GetWindowsDirectory function
|
|
// failed
|
|
//
|
|
szDistFolderPath[0] = _T('C');
|
|
szDistFolderPath[1] = _T('\0');
|
|
}
|
|
|
|
if( nProductToInstall == PRODUCT_SYSPREP )
|
|
{
|
|
hrCat=StringCchCat( szDistFolderPath, AS(szDistFolderPath), _T(":\\sysprep\\i386") );
|
|
}
|
|
else {
|
|
hrCat=StringCchCat( szDistFolderPath, AS(szDistFolderPath), _T(":\\windist") );
|
|
}
|
|
|
|
//
|
|
// Only set the dist folders if they haven't been already set, like on an
|
|
// edit on an unattend.txt
|
|
//
|
|
if( WizGlobals.DistFolder[0] == _T('\0') ) {
|
|
lstrcpyn( WizGlobals.DistFolder, szDistFolderPath, AS(WizGlobals.DistFolder) );
|
|
}
|
|
|
|
if( WizGlobals.DistShareName[0] == _T('\0') ) {
|
|
lstrcpyn( WizGlobals.DistShareName, _T("windist"), AS(WizGlobals.DistShareName) );
|
|
}
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: OnSetActiveProduct
|
|
//
|
|
// Purpose: Called at SETACTIVE time.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
VOID OnSetActiveProduct(HWND hwnd)
|
|
{
|
|
int nButtonId = IDC_UNATTENED_INSTALL;
|
|
|
|
//
|
|
// Select the proper radio button
|
|
//
|
|
switch( WizGlobals.iProductInstall ) {
|
|
|
|
case PRODUCT_UNATTENDED_INSTALL:
|
|
nButtonId = IDC_UNATTENED_INSTALL;
|
|
break;
|
|
|
|
case PRODUCT_SYSPREP:
|
|
nButtonId = IDC_SYSPREP;
|
|
break;
|
|
|
|
case PRODUCT_REMOTEINSTALL:
|
|
nButtonId = IDC_REMOTEINSTALL;
|
|
break;
|
|
|
|
default:
|
|
AssertMsg( FALSE,
|
|
"Invalid value for WizGlobals.iProductInstall" );
|
|
break;
|
|
}
|
|
|
|
CheckRadioButton( hwnd,
|
|
IDC_UNATTENED_INSTALL,
|
|
IDC_SYSPREP,
|
|
nButtonId );
|
|
|
|
WIZ_BUTTONS(hwnd, PSWIZB_BACK | PSWIZB_NEXT);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: OnWizNextProduct
|
|
//
|
|
// Purpose: Store the radio button setting in the appropriate global variable
|
|
// and set the dist folder path depending on the option they chose.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
VOID
|
|
OnWizNextProduct( HWND hwnd ) {
|
|
|
|
INT iNewProductInstall;
|
|
|
|
if( IsDlgButtonChecked(hwnd, IDC_UNATTENED_INSTALL) )
|
|
{
|
|
iNewProductInstall = PRODUCT_UNATTENDED_INSTALL;
|
|
}
|
|
else if( IsDlgButtonChecked(hwnd, IDC_SYSPREP) )
|
|
{
|
|
iNewProductInstall = PRODUCT_SYSPREP;
|
|
}
|
|
else if( IsDlgButtonChecked(hwnd, IDC_REMOTEINSTALL) )
|
|
{
|
|
iNewProductInstall = PRODUCT_REMOTEINSTALL;
|
|
}
|
|
else
|
|
{
|
|
iNewProductInstall = IDC_UNATTENED_INSTALL;
|
|
}
|
|
|
|
//
|
|
// If they picked a new product and the new product is sysprep then we
|
|
// have to delete all the computer names because sysprep only supports
|
|
// one computer name.
|
|
//
|
|
|
|
if( WizGlobals.iProductInstall != iNewProductInstall )
|
|
{
|
|
|
|
if( iNewProductInstall == PRODUCT_SYSPREP )
|
|
{
|
|
ResetNameList( &GenSettings.ComputerNames );
|
|
}
|
|
|
|
}
|
|
|
|
WizGlobals.iProductInstall = iNewProductInstall;
|
|
|
|
//
|
|
// Set the dist folder names based on product selection
|
|
//
|
|
SetDistFolderNames( WizGlobals.iProductInstall );
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: OnRadioButtonProduct
|
|
//
|
|
// Purpose: Called when a radio button is pushed.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
VOID OnRadioButtonProduct(HWND hwnd, int nButtonId)
|
|
{
|
|
CheckRadioButton(hwnd,
|
|
IDC_UNATTENED_INSTALL,
|
|
IDC_SYSPREP,
|
|
nButtonId);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: DlgProductPage
|
|
//
|
|
// Purpose: This is the dialog procedure the Product page.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
INT_PTR CALLBACK DlgProductPage(
|
|
IN HWND hwnd,
|
|
IN UINT uMsg,
|
|
IN WPARAM wParam,
|
|
IN LPARAM lParam)
|
|
{
|
|
BOOL bStatus = TRUE;
|
|
|
|
switch (uMsg) {
|
|
|
|
case WM_COMMAND:
|
|
{
|
|
int nButtonId;
|
|
|
|
switch ( nButtonId = LOWORD(wParam) ) {
|
|
|
|
case IDC_UNATTENED_INSTALL:
|
|
case IDC_REMOTEINSTALL:
|
|
case IDC_SYSPREP:
|
|
|
|
if ( HIWORD(wParam) == BN_CLICKED )
|
|
OnRadioButtonProduct(hwnd, LOWORD(wParam));
|
|
break;
|
|
|
|
default:
|
|
bStatus = FALSE;
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case WM_NOTIFY:
|
|
{
|
|
LPNMHDR pnmh = (LPNMHDR)lParam;
|
|
switch( pnmh->code ) {
|
|
|
|
case PSN_QUERYCANCEL:
|
|
WIZ_CANCEL(hwnd);
|
|
break;
|
|
|
|
case PSN_SETACTIVE:
|
|
|
|
g_App.dwCurrentHelp = IDH_PROD_INST;
|
|
|
|
// Set this flag so we get a prompt when user wants to cancel
|
|
//
|
|
SET_FLAG(OPK_EXIT, FALSE);
|
|
SET_FLAG(OPK_CREATED, TRUE);
|
|
|
|
OnSetActiveProduct(hwnd);
|
|
break;
|
|
|
|
case PSN_WIZNEXT:
|
|
|
|
OnWizNextProduct( hwnd );
|
|
|
|
bStatus = FALSE;
|
|
|
|
break;
|
|
|
|
case PSN_HELP:
|
|
WIZ_HELP();
|
|
break;
|
|
|
|
default:
|
|
bStatus = FALSE;
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
|
|
default:
|
|
bStatus = FALSE;
|
|
break;
|
|
}
|
|
return bStatus;
|
|
}
|