//////////////////////////////////////////////////////////////////////////////// // // 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"