Files
geomative/GeomativeStudio/Install/test1/Script Files/Setup.rul
T
coco df489d5640 a
2026-07-03 16:05:30 +08:00

406 lines
16 KiB
Plaintext

////////////////////////////////////////////////////////////////////////////////
//
// IIIIIII SSSSSS
// II SS InstallShield (R)
// II SSSSSS (c) 1996-2002, InstallShield Software Corporation
// II SS All rights reserved.
// IIIIIII SSSSSS
//
//
// This template script provides the code necessary to build an entry-point
// function to be called in an InstallScript custom action.
//
//
// File Name: Setup.rul
//
// Description: InstallShield script
//
////////////////////////////////////////////////////////////////////////////////
#define dpinst64_FILE "dpinst_amd64\\dpinst_amd64.exe"
#define dpinst32_FILE "dpinst_x86\\dpinst_x86.exe"
#define vcp32_FILE "x86\\dpinst_x86.exe"
#define vcp64_FILE "x64\\dpinst_amd64.exe"
#define autoDriver32_PATH "C:\\WINDOWS\\system32\\drivers\\"
#define autoDriver64_PATH "C:\\WINDOWS\\system64\\drivers\\"
#define accessDBEngine "AccessDatabaseEngine.exe"
#define PSAPI_FILE "psapi.dll"
#define runInstallName "\\Geomative_setup.exe"
#define setInstDirverReg "set_driver.bat"
#define allExe "*.exe"
#define allBat "*.bat"
#define allTxt "*.txt"
#define allAccdb "*.accdb"
#define allInf "*.Inf"
// Include Ifx.h for built-in InstallScript function prototypes, for Windows
// Installer API function prototypes and constants, and to declare code for
// the OnBegin and OnEnd events.
#include "ifx.h"
// The keyword export identifies MyFunction() as an entry-point function.
// The argument it accepts must be a handle to the Installer database.
export prototype MyFunction(HWND);
//prototype OnResumeUIBefore();
// To Do: Declare global variables, define constants, and prototype user-
// defined and DLL functions here.
prototype BOOL SetAutoInstallDirver(NUMBER);
function OnFirstUIBefore()
STRING szStrName, svStrValue;
NUMBER nvSize, nvType;
begin
RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE );
if (RegDBGetKeyValueEx ("第三方程序的注册表项", "Path", nvType, svStrValue, nvSize) < 0) then
LaunchAppAndWait("AccessDatabaseEngine.exe" , "/i "+SUPPORTDIR^"第三方程序文件名.msi"+""+" /qn" ,WAIT) ;
endif ;
end;
// To Do: Create a custom action for this entry-point function:
// 1. Right-click on "Custom Actions" in the Sequences/Actions view.
// 2. Select "Custom Action Wizard" from the context menu.
// 3. Proceed through the wizard and give the custom action a unique name.
// 4. Select "Run InstallScript code" for the custom action type, and in
// the next panel select "MyFunction" (or the new name of the entry-
// point function) for the source.
// 5. Click Next, accepting the default selections until the wizard
// creates the custom action.
//
// Once you have made a custom action, you must execute it in your setup by
// inserting it into a sequence or making it the result of a dialog's
// control event.
///////////////////////////////////////////////////////////////////////////////
//
// Function: MyFunction
//
// Purpose: This function will be called by the script engine when
// Windows(TM) Installer executes your custom action (see the "To
// Do," above).
//
///////////////////////////////////////////////////////////////////////////////
STRING strInstallStatus;
function MyFunction(hMSI)
// To Do: Declare local variables.
STRING strDriverPath, strOSVer, strRes, strInfo,strODBCPath;
NUMBER nResult,nvSize,nvType;
STRING strODBCRegPath, strGeoKey,strGeoJetKey,strODBCDataSourceKey,strODBCInstKey,strRegVal;
BOOL bIsNeedWriteGeoKey;
STRING strInstDriBasePath,strExtInstDriverPath;
begin
strDriverPath = INSTALLDIR + "GD_10\\";
strODBCPath = INSTALLDIR + "DBConntEngine\\";
MessageBox("Ready to install hardware driver ,please wait for a moment",INFORMATION);
bIsNeedWriteGeoKey = FALSE;
//this is a test
// if (LaunchAppAndWait(strODBCPath^accessDBEngine, "AUTORUN",LAAW_OPTION_WAIT) < 0) then
// Sprintf(strInfo, "Unable to launch %s, path = %s", accessDBEngine, strODBCPath);
// MessageBox (strInfo, WARNING);
// else
// MessageBox ("install DB compelete!",INFORMATION);
//regedit ODBC in System DSN
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
strODBCRegPath= "\\SOFTWARE\\Wow6432Node\\ODBC";
strGeoKey = "\\ODBC.INI\\AccessDB For Geomative";
strGeoJetKey = strGeoKey + "\\Engines\\Jet";
strODBCInstKey = "\\ODBCINST.INI\\Microsoft Access Driver (*.mdb, *.accdb)";
if(RegDBKeyExist(strODBCRegPath) < 0) then
strODBCRegPath = "\\SOFTWARE\\ODBC";
if(RegDBKeyExist(strODBCRegPath)<0) then
MessageBox ("regidit info error!",INFORMATION);
else
//write strGeoKey if there was not strGeoKey
if(RegDBKeyExist(strODBCRegPath^strGeoKey)<0) then
// MessageBox("need to wirte GeoDB key in 32 bit!", INFORMATION);
bIsNeedWriteGeoKey = TRUE;
// else
// MessageBox("don't need to wirte GeoDB key in 32 bit!", INFORMATION);
endif;
endif;
else
if(RegDBKeyExist(strODBCRegPath^strGeoKey)<0)then
//MessageBox("need to wirte GeoDB key in 64 bit!", INFORMATION);
bIsNeedWriteGeoKey = TRUE;
//else
// MessageBox("don't need to wirte GeoDB key in 64 bit!", INFORMATION);
endif;
endif;
//endif;
//wirte geomative odbc
if(TRUE == bIsNeedWriteGeoKey) then
nvType=REGDB_STRING;
strRegVal = "";
strODBCDataSourceKey = strODBCRegPath + "\\ODBC.INI\\ODBC Data Sources";
if(0 == RegDBGetKeyValueEx(strODBCRegPath^strODBCInstKey, "Driver",nvType,strRegVal,nvSize)) then
//write geo key
RegDBSetKeyValueEx(strODBCRegPath^strGeoKey,"Driver",REGDB_STRING,strRegVal,-1);
RegDBSetKeyValueEx(strODBCRegPath^strGeoKey,"DriverId",REGDB_NUMBER,"25",-1);
RegDBSetKeyValueEx(strODBCRegPath^strGeoKey,"FIL",REGDB_STRING,"MS Access;",-1);
RegDBSetKeyValueEx(strODBCRegPath^strGeoKey,"SafeTransactions",REGDB_NUMBER,"0",-1);
RegDBSetKeyValueEx(strODBCRegPath^strGeoKey,"UID",REGDB_STRING,"",-1);
//set jetkey val
RegDBSetKeyValueEx(strODBCRegPath^strGeoJetKey,"ImplicitCommitSync",REGDB_STRING,"",-1);
RegDBSetKeyValueEx(strODBCRegPath^strGeoJetKey,"MaxBufferSize",REGDB_NUMBER,"2048",-1);
RegDBSetKeyValueEx(strODBCRegPath^strGeoJetKey,"PageTimeout",REGDB_NUMBER,"5",-1);
RegDBSetKeyValueEx(strODBCRegPath^strGeoJetKey,"Threads",REGDB_NUMBER,"3",-1);
RegDBSetKeyValueEx(strODBCRegPath^strGeoJetKey,"UserCommitSync",REGDB_STRING,"Yes",-1);
//wirte ODBC Data Sources
RegDBSetKeyValueEx(strODBCDataSourceKey,"AccessDB For Geomative",REGDB_STRING,"Microsoft Access Driver (*.mdb, *.accdb)",-1);
else
MessageBox("can't get ODBC install information", INFORMATION);
endif;
endif;
//SetObjectPermissions(INSTALLDIR, IS_PERMISSIONS_TYPE_FOLDER, "", "Everyone", DELETE|GENERIC_ALL|FILE_ALL_ACCESS,0);
// SetAutoInstallDirver(0);
// if(AskYesNo("Do you want to exec set_driver reg?",YES) = YES) then
// if(LaunchAppAndWait(strDriverPath^setInstDirverReg, "", LAAW_OPTION_WAIT | LAAW_OPTION_HIDDEN) < 0) then
//if (LaunchApp(, "") < 0) then
// Sprintf(strInfo, "Unable to launch %s", strDriverPath^setInstDirverReg);
// MessageBox (strInfo, WARNING);
// else
// MessageBox ("start set_driver success", WARNING);
// endif;
// endif;
// endif;
if(SYSINFO.bIsWow64) then
strOSVer = "this is 64 bit platform";
//MessageBox (strOSVer, INFORMATION);
nResult = XCopyFile (strDriverPath ^ "*.*", autoDriver64_PATH ^ "*.*",INCLUDE_SUBDIR);
if ( nResult < 0) then
strInfo = FormatMessage(nResult);
MessageBox (strInfo, WARNING);
endif;
if(FindFile(strDriverPath,vcp64_FILE,strRes) < 0) then
Sprintf (strInfo, "Find %s failed,path = %s", vcp64_FILE,strDriverPath);
MessageBox (strInfo, WARNING);
else
if (LaunchApp(strDriverPath^vcp64_FILE, "") < 0) then
//if (LaunchAppAndWait(strDriverPath^vcp64_FILE, "",LAAW_OPTION_HIDDEN) < 0) then
Sprintf(strInfo, "Unable to launch %s, path = %s. Are you running installation file as Adimistrator?", vcp64_FILE, strDriverPath);
MessageBox (strInfo, WARNING);
endif;
endif;
else
strOSVer = "this is 32 bit platform";
// MessageBox (strOSVer, INFORMATION);
//copy file to auto_driver
nResult = XCopyFile (strDriverPath ^ "*.*", autoDriver32_PATH ^ "*.*",INCLUDE_SUBDIR);
if ( nResult < 0) then
strInfo = FormatMessage(nResult);
MessageBox (strInfo, WARNING);
endif;
if(FindFile(strDriverPath,vcp32_FILE,strRes) < 0) then
Sprintf (strInfo, "Find %s failed,path = %s", vcp32_FILE, strDriverPath);
MessageBox (strInfo, WARNING);
else
if (LaunchApp(strDriverPath^vcp32_FILE, "") < 0) then
// if (LaunchAppAndWait(strDriverPath^vcp32_FILE, "",LAAW_OPTION_HIDDEN) < 0) then
Sprintf(strInfo, "Unable to launch %s, path = %s", vcp32_FILE, strDriverPath);
MessageBox (strInfo, WARNING);
endif;
endif;
endif;
// SetObjectPermissions(INSTALLDIR, IS_PERMISSIONS_TYPE_FOLDER, "", "Everyone",
//DELETE|GENERIC_ALL|FILE_ALL_ACCESS,0);
// To Do: Write script that will be executed when MyFunction is called.
end;
export prototype SetupCheck(HWND);
function SetupCheck(hMSI)
// To Do: Declare local variables.
STRING strNoteInfo1,strNoteInfo2;
begin
//dasdasdasdad
strNoteInfo1 = "NOTE:\n1.For WIN7,WIN8,WIN10 system,please ensure right-click \"Geomative_setup.exe\",then click \"Run as administrator\" to install;\n if not,please cancel and install again.\n";
strNoteInfo2 = "2.During installation,please ensure the destination path has full read-write access.\n\nDo you want to continue running setup?";
// MessageBox(strNoteInfo1+strNoteInfo2,INFORMATION);
//abort;
// To Do: Write script that will be executed when MyFunction is called.
if(AskYesNo(strNoteInfo1+strNoteInfo2,YES) = NO) then
// InstallFinalize();
abort;
endif;
end;
//test
export prototype StartSetupAfterUpgrade(HWND);
function StartSetupAfterUpgrade(hMSI)
STRING SETUPEXEDIR[MAX_PATH + 1]; //获取安装程序Setup.exe自身所在的路径
//STRING strCurDir;
STRING strShow;
//STRING szProductName,szBmpPath;
NUMBER nBuffer; // local buffer-size variable
begin
if(""=UNINSTALL_STRING) then
MessageBox("not stalled status",INFORMATION);
else
MessageBox("stalled status",INFORMATION);
nBuffer = MAX_PATH + 1; // initialize size buffer before calling siGetProperty
MsiGetProperty(ISMSI_HANDLE, "SETUPEXEDIR", SETUPEXEDIR, nBuffer);
//Sprintf(strShow, "installdir0 = %s", SETUPEXEDIR);
//MessageBox(strShow,WARNING);
if (LaunchApp(SETUPEXEDIR^runInstallName, "") < 0) then
Sprintf(strShow, "installdir1 = %s", SETUPEXEDIR);
MessageBox(strShow,WARNING);
MessageBox ("load setup.exe failed!", WARNING);
endif;
endif;
end;
function BOOL SetAutoInstallDirver(nvSetVal)
STRING strInstDriBasePath;
STRING strExtInstDriverPath;
STRING strAutoInstKey;
STRING strShow;
STRING strResVal;
begin
if(RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE) < 0) then
MessageBox("set local_machine failed!",WARNING);
endif;
strInstDriBasePath = "\\SOFTWARE";
strExtInstDriverPath = "\\Microsoft\\Windows\\CurrentVersion";
if(RegDBKeyExist(strInstDriBasePath^strExtInstDriverPath) < 0) then
Sprintf(strShow, "path1 = %s", strInstDriBasePath^strExtInstDriverPath);
MessageBox(strShow,WARNING);
strExtInstDriverPath = "\\Policies\\Microsoft\\Windows\\DriverSearching";
//如果都查找不到,则返回错误
if(RegDBKeyExist(strInstDriBasePath^strExtInstDriverPath) < 0) then
MessageBox("can't found installDriver Information!",WARNING);
return FALSE;
//如果查找到该项,则认为是XP,2003的需要验证
//由于在XP里的项用的是DontSearchWindowsUpdate,所以最后得到的值也要取反
else
strAutoInstKey = "DontSearchWindowsUpdate";
Sprintf(strResVal,"%d",!nvSetVal);
Sprintf(strShow, "found installdirver in xp,org = %d, res = %s", nvSetVal,strResVal);
MessageBox(strShow,WARNING);
endif;
//如果可以找到,则认为是WIN7,8,10
else
strExtInstDriverPath = strExtInstDriverPath + "\\DriverSearching";
strAutoInstKey = "SearchOrderConfig";
Sprintf(strResVal,"%d",nvSetVal);
endif;
if(RegDBSetKeyValueEx(strInstDriBasePath^"\\"^strExtInstDriverPath,strAutoInstKey,REGDB_NUMBER,strResVal,-1)<0)then
Sprintf(strShow,"set dirvieconfig failed, path = %s, value = %s",strInstDriBasePath^"\\"^strExtInstDriverPath, strResVal);
MessageBox(strShow,WARNING);
return FALSE;
endif;
return TRUE;
end;
export prototype test(HWND);
function test(hMSI)
STRING strTest1,strBase,strInfo;
begin
strBase = "C:\\Geomative\\Geomative_setup\\";
strTest1 = "Geomative\\*.*";
strInfo = strBase+strTest1;
MessageBox(strBase^strTest1,INFORMATION);
MessageBox(strInfo,INFORMATION);
strTest1="*.*";
Sprintf(strInfo,"%s %s",strBase,strTest1);
MessageBox(strInfo,INFORMATION);
Sprintf(strInfo,"%s%s",strBase,strTest1);
MessageBox(strInfo,INFORMATION);
end;
//this is a test dsadada
export prototype UnInstallPreVersion(HWND);
function UnInstallPreVersion(hMSI)
//STRING strDstFile,strShow,strDelFile;
INT installlDirID;
STRING folder,strInstDir;
begin
//MessageBox("unstall dir = 133333...",INFORMATION);
strInstDir = INSTALLDIR;
/*
strDstFile = strInstDir+"Geomative\\*.*";
MessageBox(strDstFile,INFORMATION);
DeleteFile(strDstFile);
strDstFile = strInstDir + "Geomative\\LOG\\*.*";
MessageBox(strDstFile,INFORMATION);
DeleteFile(strDelFile);
strDstFile = strInstDir + "Geomative\\DB\\*.*";
MessageBox(strDstFile,INFORMATION);
DeleteFile(strDelFile);
strDstFile = strInstDir + "Geomative\\firmware\\*.*";
MessageBox(strDstFile,INFORMATION);
DeleteFile(strDelFile);
strDstFile = strInstDir + "GD_10\\*.*";
MessageBox(strDstFile,INFORMATION);
DeleteFile(strDelFile);
strDstFile = strInstDir + "DBConntEngine\\*.*";
MessageBox(strDstFile,INFORMATION);
DeleteFile(strDelFile);
//test
*/
//find the first file form folder
installlDirID = ListCreate(STRINGLIST);
FindAllDirs(strInstDir,INCLUDE_SUBDIR,installlDirID);
ListGetFirstString(installlDirID,folder);
SetFileInfo(folder, FILE_ATTRIBUTE, FILE_ATTR_NORMAL,"");
while(ListGetNextString(installlDirID,folder) = 0)
SetFileInfo(folder, FILE_ATTRIBUTE, FILE_ATTR_NORMAL,"");
endwhile;
DeleteDir(strInstDir^"Geomative Studio",ALLCONTENTS);
DeleteDir(strInstDir^"GD_10",ALLCONTENTS);
DeleteDir(strInstDir^"DBConntEngine",ALLCONTENTS);
//MessageBox("unstall preversion complete",INFORMATION);
end;