|
|
/*
* Copyright (c) 1998 Microsoft Corporation * * Module Name: * * pages.cpp * * Abstract: * * This file defines the License Server Setup Wizard Page class. * * Author: * * Breen Hagan (BreenH) Oct-02-98 * * Environment: * * User Mode */
#include "stdafx.h"
#include "pages.h"
#include "logfile.h"
extern BOOL gStandAlone; extern BOOL gUnAttended; TCHAR gszInitialDir[MAX_PATH + 1];
BOOL GetCurrentSelectionState(VOID); BOOL InWin2000Domain(VOID); EInstall GetInstallSection(VOID); HINSTANCE GetInstance(VOID); EServerType GetServerRole(VOID); DWORD SetServerRole(UINT);
/*
* EnablePage::CanShow() * * The page will only be displayed during standalone installations. */
BOOL EnablePage::CanShow( ) { return((GetInstallSection() == kStandaloneInstall) && gStandAlone && !gUnAttended); }
/*
* EnablePage::OnInitDialog() * * Initializes the wizard page controls. If the machine is not a domain * controller, the server type is reduced to plain server only. */
BOOL EnablePage::OnInitDialog( HWND hWndDlg, WPARAM wParam, LPARAM lParam ) { BOOL fInDomain = InWin2000Domain(); TCHAR pszExpDir[MAX_PATH + 1];
if (!fInDomain) { EnableWindow( GetDlgItem(GetDlgWnd(), IDC_RADIO_ENTERPRISE_SERVER), FALSE ); }
CheckRadioButton( GetDlgWnd(), IDC_RADIO_ENTERPRISE_SERVER, IDC_RADIO_PLAIN_SERVER, fInDomain ? (GetServerRole() == eEnterpriseServer ? IDC_RADIO_ENTERPRISE_SERVER : IDC_RADIO_PLAIN_SERVER ) : IDC_RADIO_PLAIN_SERVER );
_tcscpy(gszInitialDir, GetDatabaseDirectory()); ExpandEnvironmentStrings(gszInitialDir, pszExpDir, MAX_PATH); SetDlgItemText(GetDlgWnd(), IDC_EDIT_INSTALL_DIR, pszExpDir);
UNREFERENCED_PARAMETER(lParam); UNREFERENCED_PARAMETER(wParam); UNREFERENCED_PARAMETER(hWndDlg); return(TRUE); }
BOOL EnablePage::OnCommand( HWND hWndDlg, WPARAM wParam, LPARAM lParam ) { int iRet;
if ((LOWORD(wParam) == IDC_BUTTON_BROWSE_DIR) && (HIWORD(wParam) == BN_CLICKED)) { BROWSEINFO brInfo; ZeroMemory(&brInfo, sizeof(brInfo));
brInfo.hwndOwner = hWndDlg;
TCHAR strText[1024]; iRet = LoadString( GetInstance(), IDS_STRING_DIRECTORY_SELECT, strText, 1024 );
brInfo.lpszTitle = strText;
LPITEMIDLIST pidl = SHBrowseForFolder(&brInfo); if (pidl) { TCHAR szDir[MAX_PATH + 1]; SHGetPathFromIDList (pidl, szDir); SetDlgItemText(hWndDlg, IDC_EDIT_INSTALL_DIR, szDir); } }
UNREFERENCED_PARAMETER(lParam); return(TRUE); }
BOOL EnablePage::ApplyChanges( ) { BOOL fDirExists = FALSE; DWORD dwErr; int iRet; TCHAR szTxt[MAX_PATH + 1] = _T(""); TCHAR szSubDir[] = _T("\\LServer"); TCHAR szExpDir[MAX_PATH + 1]; TCHAR szExpInitDir[MAX_PATH + 1];
if (GetDlgItemText(GetDlgWnd(), IDC_EDIT_INSTALL_DIR, szTxt, MAX_PATH) == 0) {
//
// Complain about blank entries.
//
DisplayMessageBox( IDS_STRING_INVLID_INSTALLATION_DIRECTORY, IDS_MAIN_TITLE, MB_OK, &iRet );
return(FALSE); }
//
// Verify the string is not too long, expanding environment strings
// in the process.
//
if (ExpandEnvironmentStrings(szTxt, szExpDir, MAX_PATH) > MAX_PATH) { DisplayMessageBox( IDS_STRING_INVLID_INSTALLATION_DIRECTORY, IDS_MAIN_TITLE, MB_OK, &iRet );
return(FALSE); }
//
// If the entry is still the original default directory, no more
// verification is necessary.
//
ExpandEnvironmentStrings(gszInitialDir, szExpInitDir, MAX_PATH); if (_tcsicmp(szExpDir, szExpInitDir) == 0) { goto DirCreation; }
//
// Check for directory existance before appending a subdirectory.
// This will prevent the user chosen directory of "C:\", for
// example, from prompting the user to create the directory.
//
fDirExists = SetCurrentDirectory(szExpDir);
//
// The user has chosen a different directory. To protect its
// contents during uninstall, the TLServer subdirectory will be
// used.
//
if ((_tcslen(szExpDir) + _tcslen(szSubDir) + 1) > MAX_PATH) { DisplayMessageBox( IDS_STRING_INVLID_INSTALLATION_DIRECTORY, IDS_MAIN_TITLE, MB_OK, &iRet );
return(FALSE); }
_tcscat(szExpDir, szSubDir); _tcscat(szTxt, szSubDir);
//
// Verify the user's directory choice is valid, e.g. no floppy
// drives, CD-ROMs, network paths, etc.
//
if (CheckDatabaseDirectory(szExpDir) != ERROR_SUCCESS) { DisplayMessageBox( IDS_STRING_INVLID_INSTALLATION_DIRECTORY, IDS_MAIN_TITLE, MB_OK, &iRet );
return(FALSE); }
//
// Prompt to create the directory if necessary.
//
if (!fDirExists) { DisplayMessageBox( IDS_STRING_CREATE_INSTALLATION_DIRECTORY, IDS_MAIN_TITLE, MB_OKCANCEL, &iRet );
if (iRet != IDOK) { return(FALSE); } }
//
// The selected directory has passed all the tests, but it may
// still not be created. If creation fails, let the user know,
// and let s/he choose another directory.
//
DirCreation: SetDatabaseDirectory(szTxt);
dwErr = CreateDatabaseDirectory(); if (dwErr != ERROR_SUCCESS) { DisplayMessageBox( IDS_STRING_CANT_CREATE_INSTALLATION_DIRECTORY, IDS_MAIN_TITLE, MB_OK, &iRet );
return(FALSE); }
SetServerRole(IsDlgButtonChecked ( GetDlgWnd(), IDC_RADIO_ENTERPRISE_SERVER) == BST_CHECKED ? eEnterpriseServer : ePlainServer);
return(TRUE); }
|