boinc/clientsetup/win/CAVerifyInstallDirectories.cpp

235 lines
8.1 KiB
C++

// Berkeley Open Infrastructure for Network Computing
// http://boinc.berkeley.edu
// Copyright (C) 2005 University of California
//
// This is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation;
// either version 2.1 of the License, or (at your option) any later version.
//
// This software is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU Lesser General Public License for more details.
//
// To view the GNU Lesser General Public License visit
// http://www.gnu.org/copyleft/lesser.html
// or write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
#include "stdafx.h"
#include "boinccas.h"
#include "CAVerifyInstallDirectories.h"
#define CUSTOMACTION_NAME _T("CAVerifyInstallDirectories")
#define CUSTOMACTION_PROGRESSTITLE _T("")
/////////////////////////////////////////////////////////////////////
//
// Function:
//
// Description:
//
/////////////////////////////////////////////////////////////////////
CAVerifyInstallDirectories::CAVerifyInstallDirectories(MSIHANDLE hMSIHandle) :
BOINCCABase(hMSIHandle, CUSTOMACTION_NAME, CUSTOMACTION_PROGRESSTITLE)
{}
/////////////////////////////////////////////////////////////////////
//
// Function:
//
// Description:
//
/////////////////////////////////////////////////////////////////////
CAVerifyInstallDirectories::~CAVerifyInstallDirectories()
{
BOINCCABase::~BOINCCABase();
}
/////////////////////////////////////////////////////////////////////
//
// Function:
//
// Description:
//
/////////////////////////////////////////////////////////////////////
UINT CAVerifyInstallDirectories::OnExecution()
{
tstring strInstallDirectory;
tstring strDataDirectory;
tstring strWindowsDirectory;
tstring strWindowsSystemDirectory;
tstring strProgramFilesDirectory;
tstring strSystemDrive;
tstring strVersionWindows64;
UINT uiReturnValue = 0;
uiReturnValue = GetProperty( _T("INSTALLDIR"), strInstallDirectory );
if ( uiReturnValue ) return uiReturnValue;
uiReturnValue = GetProperty( _T("DATADIR"), strDataDirectory );
if ( uiReturnValue ) return uiReturnValue;
uiReturnValue = GetProperty( _T("VersionNT64"), strVersionWindows64 );
if ( uiReturnValue ) return uiReturnValue;
uiReturnValue = GetProperty( _T("WindowsFolder"), strWindowsDirectory );
if ( uiReturnValue ) return uiReturnValue;
uiReturnValue = GetProperty( _T("WindowsVolume"), strSystemDrive );
if ( uiReturnValue ) return uiReturnValue;
if (strVersionWindows64.length() > 0)
{
uiReturnValue = GetProperty( _T("System64Folder"), strWindowsSystemDirectory );
if ( uiReturnValue ) return uiReturnValue;
uiReturnValue = GetProperty( _T("ProgramFiles64Folder"), strProgramFilesDirectory );
if ( uiReturnValue ) return uiReturnValue;
}
else
{
uiReturnValue = GetProperty( _T("SystemFolder"), strWindowsSystemDirectory );
if ( uiReturnValue ) return uiReturnValue;
uiReturnValue = GetProperty( _T("ProgramFilesFolder"), strProgramFilesDirectory );
if ( uiReturnValue ) return uiReturnValue;
}
// Perform some basic sanity tests to see if we need to migrate
// anything.
BOOL bInstallDataSameDirectory =
(BOOL)(strInstallDirectory == strDataDirectory);
BOOL bInstallDirWindowsDirSame =
(BOOL)(strInstallDirectory == strWindowsDirectory);
BOOL bDataDirWindowsDirSame =
(BOOL)(strDataDirectory == strWindowsDirectory);
BOOL bInstallDirSystemDriveSame =
(BOOL)(strInstallDirectory == strSystemDrive);
BOOL bDataDirSystemDriveSame =
(BOOL)(strDataDirectory == strSystemDrive);
BOOL bInstallDirWindowsSystemDirSame =
(BOOL)(strInstallDirectory == strWindowsSystemDirectory);
BOOL bDataDirWindowsSystemDirSame =
(BOOL)(strDataDirectory == strWindowsSystemDirectory);
BOOL bInstallDirProgramFilesDirSame =
(BOOL)(strInstallDirectory == strProgramFilesDirectory);
BOOL bDataDirProgramFilesDirSame =
(BOOL)(strDataDirectory == strProgramFilesDirectory);
if ( bInstallDataSameDirectory ) {
DisplayMessage(
MB_OK,
MB_ICONERROR,
_T("The program directory and data directory must be different. Please select a different data directory.")
);
SetProperty(_T("RETURN_VERIFYINSTALLDIRECTORIES"), _T("0"));
uiReturnValue = ERROR_INSTALL_USEREXIT;
} else if ( bInstallDirWindowsDirSame ) {
DisplayMessage(
MB_OK,
MB_ICONERROR,
_T("The program directory may not be the Windows directory. Please select a different program directory.")
);
SetProperty(_T("RETURN_VERIFYINSTALLDIRECTORIES"), _T("0"));
uiReturnValue = ERROR_INSTALL_USEREXIT;
} else if ( bDataDirWindowsDirSame ) {
DisplayMessage(
MB_OK,
MB_ICONERROR,
_T("The data directory may not be the Windows directory. Please select a different data directory.")
);
SetProperty(_T("RETURN_VERIFYINSTALLDIRECTORIES"), _T("0"));
uiReturnValue = ERROR_INSTALL_USEREXIT;
} else if ( bInstallDirSystemDriveSame ) {
DisplayMessage(
MB_OK,
MB_ICONERROR,
_T("The program directory may not be the system drive. Please select a different program directory.")
);
SetProperty(_T("RETURN_VERIFYINSTALLDIRECTORIES"), _T("0"));
uiReturnValue = ERROR_INSTALL_USEREXIT;
} else if ( bDataDirSystemDriveSame ) {
DisplayMessage(
MB_OK,
MB_ICONERROR,
_T("The data directory may not be the system drive. Please select a different data directory.")
);
SetProperty(_T("RETURN_VERIFYINSTALLDIRECTORIES"), _T("0"));
uiReturnValue = ERROR_INSTALL_USEREXIT;
} else if ( bInstallDirWindowsSystemDirSame ) {
DisplayMessage(
MB_OK,
MB_ICONERROR,
_T("The program directory may not be the Windows system directory. Please select a different program directory.")
);
SetProperty(_T("RETURN_VERIFYINSTALLDIRECTORIES"), _T("0"));
uiReturnValue = ERROR_INSTALL_USEREXIT;
} else if ( bDataDirWindowsSystemDirSame ) {
DisplayMessage(
MB_OK,
MB_ICONERROR,
_T("The data directory may not be the Windows system directory. Please select a different data directory.")
);
SetProperty(_T("RETURN_VERIFYINSTALLDIRECTORIES"), _T("0"));
uiReturnValue = ERROR_INSTALL_USEREXIT;
} else if ( bInstallDirProgramFilesDirSame ) {
DisplayMessage(
MB_OK,
MB_ICONERROR,
_T("The program directory may not be the program files directory. Please select a different program directory.")
);
SetProperty(_T("RETURN_VERIFYINSTALLDIRECTORIES"), _T("0"));
uiReturnValue = ERROR_INSTALL_USEREXIT;
} else if ( bDataDirProgramFilesDirSame ) {
DisplayMessage(
MB_OK,
MB_ICONERROR,
_T("The data directory may not be the program files directory. Please select a different data directory.")
);
SetProperty(_T("RETURN_VERIFYINSTALLDIRECTORIES"), _T("0"));
uiReturnValue = ERROR_INSTALL_USEREXIT;
} else {
SetProperty(_T("RETURN_VERIFYINSTALLDIRECTORIES"), _T("1"));
uiReturnValue = ERROR_SUCCESS;
}
return uiReturnValue;
}
/////////////////////////////////////////////////////////////////////
//
// Function: VerifyInstallDirectories
//
// Description:
//
/////////////////////////////////////////////////////////////////////
UINT __stdcall VerifyInstallDirectories(MSIHANDLE hInstall)
{
UINT uiReturnValue = 0;
CAVerifyInstallDirectories* pCA = new CAVerifyInstallDirectories(hInstall);
uiReturnValue = pCA->Execute();
delete pCA;
return uiReturnValue;
}