mirror of
https://github.com/ctm/executor.git
synced 2025-01-10 16:30:16 +00:00
473 lines
16 KiB
Plaintext
Executable File
473 lines
16 KiB
Plaintext
Executable File
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// IIIIIII SSSSSS
|
|
// II SS InstallShield (R)
|
|
// II SSSSSS (c) 1996-1997, InstallShield Software Corporation
|
|
// II SS (c) 1990-1996, InstallShield Corporation
|
|
// IIIIIII SSSSSS All Rights Reserved.
|
|
//
|
|
//
|
|
// This code is generated as a starting setup template. You should
|
|
// modify it to provide all necessary steps for your setup.
|
|
//
|
|
//
|
|
// File Name: Setup.rul
|
|
//
|
|
// Description: InstallShield script
|
|
//
|
|
// Comments: This template script performs a basic setup on a
|
|
// Windows 95 or Windows NT 4.0 platform. With minor
|
|
// modifications, this template can be adapted to create
|
|
// new, customized setups.
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
// Include header file
|
|
#include "sdlang.h"
|
|
#include "sddialog.h"
|
|
|
|
////////////////////// string defines ////////////////////////////
|
|
|
|
#define UNINST_LOGFILE_NAME "Uninst.isu"
|
|
#define CDENABLE_NAME "cdenable.exe"
|
|
#define CDENABLE_KEYVALUE "cdenable"
|
|
|
|
//////////////////// installation declarations ///////////////////
|
|
|
|
// ----- DLL prototypes -----
|
|
|
|
|
|
// your DLL prototypes
|
|
|
|
|
|
// ---- script prototypes -----
|
|
|
|
// generated
|
|
prototype ShowDialogs();
|
|
prototype MoveFileData();
|
|
prototype HandleMoveDataError( NUMBER );
|
|
prototype ProcessBeforeDataMove();
|
|
prototype ProcessAfterDataMove();
|
|
prototype SetupRegistry();
|
|
prototype SetupFolders();
|
|
prototype CleanUpInstall();
|
|
prototype SetupInstall();
|
|
prototype SetupScreen();
|
|
prototype CheckRequirements();
|
|
prototype DialogShowSdAskDestPath();
|
|
|
|
// your prototypes
|
|
|
|
|
|
// ----- global variables ------
|
|
|
|
// generated
|
|
BOOL bWinNT, bIsShellExplorer, bInstallAborted, bIs32BitSetup;
|
|
STRING svDir;
|
|
STRING svName, svCompany, svSerial;
|
|
STRING svDefGroup;
|
|
STRING szAppPath;
|
|
STRING svSetupType;
|
|
|
|
|
|
// your global variables
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// MAIN PROGRAM
|
|
//
|
|
// The setup begins here by hiding the visible setup
|
|
// window. This is done to allow all the titles, images, etc. to
|
|
// be established before showing the main window. The following
|
|
// logic then performs the setup in a series of steps.
|
|
//
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
program
|
|
Disable( BACKGROUND );
|
|
|
|
CheckRequirements();
|
|
|
|
SetupInstall();
|
|
|
|
SetupScreen();
|
|
|
|
if (ShowDialogs()<0) goto end_install;
|
|
|
|
if (ProcessBeforeDataMove()<0) goto end_install;
|
|
|
|
if (MoveFileData()<0) goto end_install;
|
|
|
|
if (ProcessAfterDataMove()<0) goto end_install;
|
|
|
|
if (SetupRegistry()<0) goto end_install;
|
|
|
|
if (SetupFolders()<0) goto end_install;
|
|
|
|
|
|
end_install:
|
|
|
|
CleanUpInstall();
|
|
|
|
// If an unrecoverable error occurred, clean up the partial installation.
|
|
// Otherwise, exit normally.
|
|
|
|
if (bInstallAborted) then
|
|
abort;
|
|
endif;
|
|
|
|
endprogram
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// Function: ShowDialogs //
|
|
// //
|
|
// Purpose: This function manages the display and navigation //
|
|
// the standard dialogs that exist in a setup. //
|
|
// //
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
function ShowDialogs()
|
|
NUMBER nResult;
|
|
begin
|
|
|
|
Dlg_Start:
|
|
// beginning of dialogs label
|
|
|
|
Dlg_SdAskDestPath:
|
|
nResult = DialogShowSdAskDestPath();
|
|
if (nResult = BACK) goto Dlg_Start;
|
|
|
|
return 0;
|
|
|
|
end;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// Function: ProcessBeforeDataMove //
|
|
// //
|
|
// Purpose: This function performs any necessary operations prior to the //
|
|
// actual data move operation. //
|
|
// //
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
function ProcessBeforeDataMove()
|
|
STRING svLogFile;
|
|
NUMBER nResult;
|
|
begin
|
|
|
|
InstallationInfo( @COMPANY_NAME, @PRODUCT_NAME, @PRODUCT_VERSION, @PRODUCT_KEY );
|
|
|
|
svLogFile = UNINST_LOGFILE_NAME;
|
|
|
|
nResult = DeinstallStart( svDir, svLogFile, @UNINST_KEY, 0 );
|
|
if (nResult < 0) then
|
|
MessageBox( @ERROR_UNINSTSETUP, WARNING );
|
|
endif;
|
|
|
|
szAppPath = TARGETDIR; // TODO : if your application .exe is in a subdir of TARGETDIR then add subdir
|
|
|
|
if ((bIs32BitSetup) && (bIsShellExplorer)) then
|
|
RegDBSetItem( REGDB_APPPATH, szAppPath );
|
|
RegDBSetItem( REGDB_APPPATH_DEFAULT, szAppPath ^ @PRODUCT_KEY );
|
|
RegDBSetItem( REGDB_UNINSTALL_NAME, @UNINST_DISPLAY_NAME );
|
|
endif;
|
|
|
|
// TODO : update any items you want to process before moving the data
|
|
//
|
|
|
|
return 0;
|
|
end;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// Function: MoveFileData //
|
|
// //
|
|
// Purpose: This function handles the data movement for //
|
|
// the setup. //
|
|
// //
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
function MoveFileData()
|
|
NUMBER nResult, nDisk;
|
|
begin
|
|
|
|
nDisk = 1;
|
|
SetStatusWindow( 0, "" );
|
|
Disable( DIALOGCACHE );
|
|
Enable( STATUS );
|
|
StatusUpdate( ON, 100 );
|
|
nResult = ComponentMoveData( MEDIA, nDisk, 0 );
|
|
|
|
HandleMoveDataError( nResult );
|
|
|
|
Disable( STATUS );
|
|
|
|
return nResult;
|
|
|
|
end;
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// Function: HandleMoveDataError //
|
|
// //
|
|
// Purpose: This function handles the error (if any) during the move data //
|
|
// operation. //
|
|
// //
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
function HandleMoveDataError( nResult )
|
|
begin
|
|
|
|
switch (nResult)
|
|
case 0:
|
|
return 0;
|
|
default:
|
|
SprintfBox( SEVERE, @TITLE_CAPTIONBAR, @ERROR_MOVEDATA, nResult );
|
|
bInstallAborted = TRUE;
|
|
return nResult;
|
|
endswitch;
|
|
|
|
end;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// Function: ProcessAfterDataMove //
|
|
// //
|
|
// Purpose: This function performs any necessary operations needed after //
|
|
// all data has been moved. //
|
|
// //
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
function ProcessAfterDataMove()
|
|
STRING szReferenceFile, szCmdLine, szCommand;
|
|
begin
|
|
|
|
// DeinstallSetReference specifies a file to be checked before
|
|
// uninstallation. If the file is in use, uninstallation will not proceed.
|
|
|
|
szReferenceFile = svDir ^ @PRODUCT_KEY;
|
|
DeinstallSetReference( szReferenceFile );
|
|
|
|
szCommand = TARGETDIR ^ CDENABLE_NAME;
|
|
szCmdLine = "/ON";
|
|
LaunchApp (szCommand, szCmdLine);
|
|
|
|
return 0;
|
|
end;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// Function: SetupRegistry //
|
|
// //
|
|
// Purpose: This function makes the registry entries for this setup. //
|
|
// //
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
function SetupRegistry()
|
|
|
|
STRING szKey, szCommand;
|
|
NUMBER error;
|
|
|
|
begin
|
|
|
|
// TODO : Add all your registry entry keys here
|
|
//
|
|
//
|
|
// RegDBCreateKeyEx, RegDBSetKeyValueEx....
|
|
//
|
|
|
|
szKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
|
|
szCommand = TARGETDIR ^ CDENABLE_NAME + " /ON";
|
|
|
|
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
|
|
Disable(LOGGING);
|
|
error = RegDBCreateKeyEx(szKey, "");
|
|
Enable(LOGGING);
|
|
error = RegDBSetKeyValueEx(szKey, CDENABLE_KEYVALUE, REGDB_STRING, szCommand, -1);
|
|
return 0;
|
|
end;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Function: SetupFolders
|
|
//
|
|
// Purpose: This function creates all the folders and shortcuts for the
|
|
// setup. This includes program groups and items for Windows 3.1.
|
|
//
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
function SetupFolders()
|
|
begin
|
|
|
|
|
|
// TODO : Add all your folder (program group) along with shortcuts (program items)
|
|
//
|
|
//
|
|
// CreateProgramFolder, AddFolderIcon....
|
|
//
|
|
// Note : for 16-bit setups you should add an uninstaller icon pointing to
|
|
// your log file. Under 32-bit this is automatically done by Windows.
|
|
|
|
return 0;
|
|
end;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// Function: CleanUpInstall //
|
|
// //
|
|
// Purpose: This cleans up the setup. Anything that should //
|
|
// be released or deleted at the end of the setup should //
|
|
// be done here. //
|
|
// //
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
function CleanUpInstall()
|
|
begin
|
|
|
|
|
|
if (bInstallAborted) then
|
|
return 0;
|
|
endif;
|
|
|
|
if (BATCH_INSTALL) then // ensure locked files are properly written
|
|
CommitSharedFiles(0);
|
|
endif;
|
|
|
|
return 0;
|
|
end;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// Function: SetupInstall //
|
|
// //
|
|
// Purpose: This will setup the installation. Any general initialization //
|
|
// needed for the installation should be performed here. //
|
|
// //
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
function SetupInstall()
|
|
begin
|
|
|
|
Enable( CORECOMPONENTHANDLING );
|
|
|
|
bInstallAborted = FALSE;
|
|
|
|
if (bIs32BitSetup) then
|
|
svDir = PROGRAMFILES ^ @COMPANY_NAME ^ @PRODUCT_NAME;
|
|
else
|
|
svDir = PROGRAMFILES ^ @COMPANY_NAME16 ^ @PRODUCT_NAME16; // use shorten names
|
|
endif;
|
|
|
|
TARGETDIR = svDir;
|
|
|
|
SdProductName( @PRODUCT_NAME );
|
|
|
|
SdInit();
|
|
|
|
Enable( DIALOGCACHE );
|
|
|
|
return 0;
|
|
end;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// Function: SetupScreen //
|
|
// //
|
|
// Purpose: This function establishes the screen look. This includes //
|
|
// colors, fonts, and text to be displayed. //
|
|
// //
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
function SetupScreen()
|
|
begin
|
|
|
|
Enable( FULLWINDOWMODE );
|
|
SetTitle( @TITLE_MAIN, 24, WHITE );
|
|
|
|
SetTitle( @TITLE_CAPTIONBAR, 0, BACKGROUNDCAPTION ); // Caption bar text.
|
|
|
|
Enable( BACKGROUND );
|
|
|
|
Delay( 1 );
|
|
end;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// Function: CheckRequirements //
|
|
// //
|
|
// Purpose: This function checks all minimum requirements for the //
|
|
// application being installed. If any fail, then the user //
|
|
// is informed and the setup is terminated. //
|
|
// //
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
function CheckRequirements()
|
|
NUMBER nvDx, nvDy, nvResult;
|
|
STRING svResult;
|
|
|
|
begin
|
|
|
|
bWinNT = FALSE;
|
|
bIsShellExplorer = FALSE;
|
|
|
|
// Check screen resolution.
|
|
GetExtents( nvDx, nvDy );
|
|
|
|
if (nvDy < 480) then
|
|
MessageBox( @ERROR_VGARESOLUTION, WARNING );
|
|
abort;
|
|
endif;
|
|
|
|
// set 'setup' operation mode
|
|
bIs32BitSetup = TRUE;
|
|
GetSystemInfo( ISTYPE, nvResult, svResult );
|
|
if (nvResult = 16) then
|
|
bIs32BitSetup = FALSE; // running 16-bit setup
|
|
return 0; // no additional information required
|
|
endif;
|
|
|
|
// --- 32-bit testing after this point ---
|
|
|
|
// Determine the target system's operating system.
|
|
GetSystemInfo( OS, nvResult, svResult );
|
|
|
|
if (nvResult = IS_WINDOWSNT) then
|
|
// Running Windows NT.
|
|
bWinNT = TRUE;
|
|
|
|
// Check to see if the shell being used is EXPLORER shell.
|
|
if (GetSystemInfo( OSMAJOR, nvResult, svResult ) = 0) then
|
|
if (nvResult >= 4) then
|
|
bIsShellExplorer = TRUE;
|
|
endif;
|
|
endif;
|
|
|
|
elseif (nvResult = IS_WINDOWS95 ) then
|
|
bIsShellExplorer = TRUE;
|
|
|
|
endif;
|
|
|
|
end;
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// Function: DialogShowSdAskDestPath //
|
|
// //
|
|
// Purpose: This function asks the user for the destination directory. //
|
|
// //
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
function DialogShowSdAskDestPath()
|
|
NUMBER nResult;
|
|
STRING szTitle, szMsg;
|
|
begin
|
|
|
|
szTitle = "";
|
|
szMsg = "";
|
|
nResult = SdAskDestPath( szTitle, szMsg, svDir, 0 );
|
|
|
|
TARGETDIR = svDir;
|
|
|
|
return nResult;
|
|
end;
|
|
|
|
|
|
// --- include script file section ---
|
|
|
|
#include "sddialog.rul"
|
|
|
|
|