InstallShield腳本語言是類似C語言,利用InstallShield的嚮導或模板都可以生成基本的腳本程序框架,可以在此基礎上按自己的意願進行修改和添加。
一.基本語法規則
1.變量
BOOL 布爾型 值爲TRUE(1)或FALSE(0)
CHAR 字符型 一字節長的(8bit)的字符
HWND 窗口句柄 用來存放窗口句柄
INT 整型 兩字節長的整數
LIST 列表型 指向InstallShield列表,用ListCreate和ListDestroy
LONG 擴展數值型
LPSTR 擴展指針
NUMBER 數值型 存放四字節長的數值,範圍從-2147483648到+2147483647
POINTER 指針型
SHORT 短數值型
STRING 字符串型 十分類似VC中的LPCTSTR
變量如同標準的C語言,在使用前需要事先聲名。變量通常在兩個位置進行聲名,一是主程序外部,這樣的變量爲全局變量,二是各函數的變量聲名區,這樣的變量是局部變量。
2.操作符
一般的與C語言相同操作符,在這裏不做詳解,以下主要介紹比較特殊的操作符,
(1) + , - , * , /
以上四個操作符與C語言中意義和用法都相同。
(2) &&
與操作,與C語言中用法相同,例:x1 && x2
(3) ||
或操作,與C語言中用法相同,例:x1 || x2
(4) !
非操作,與C語言中用法相同,例:!x1
(5) *
指針操作,類似C語言中的*
(6) & , | , ^ , ~ , << , >>
分別爲位與,位或,按位異或,按位取反,左移和右移,其意義和用法都與C語言中基本相同。
(7) .
該操作符用於結構,用來得到結構的子項,與Delphi的 . 用法類似,例如:
typedef SETTINGSREC
begin
BOOL bSwitchOn;
STRING szMssg[255];
INT nVal;
end;
SETTINGSREC settings;
program
settings.bSwitchOn = FALSE;
settings.szMssg = "Off";
settings.nVal = 0;
(8) =
既可作爲賦值號,同時也做等於符,例如:
str1 = "String";
if str1="String" then
endif;
(9) &
取地址符,與C語言用法類似。
(10) < , > , = , <= , >= , !=
分別表示小於,大於,等於,小於等於,大於等於,不等於
(11) + , ^ , %
用於字符串的操作。
(12) ->
結構指針,與C語言中用法類似。
(13) @
用於得到Resource窗口中定義的字符串,例:
szReferenceFile = svDir ^ @PRODUCT_KEY;
3.函數
InstallShield的函數使用前同樣需要聲名,函數的參數傳遞方式十分類似C語言,例如下面的函數聲名:
prototype HandleMoveDataError( NUMBER );
該聲名中函數名爲HandleMoveDataError,傳遞一個NUMBER類型的參數。調用該函數時也基本與C語言中相同。
函數體的標準格式爲:
function functionname(nResult)
// 函數變量聲名區
begin
// 程序區
end;
通常的函數返回一個NUMBER型的數。
4.主程序結構
主程序以program開始,以endprogram結尾,
二.框架程序的基本結構
程序開始爲函數與變量的聲明區
通過嚮導建立的框架程序包含以下一些主函數:
prototype ShowDialogs();
// 顯示安裝嚮導對話框
prototype MoveFileData();
// 移動文件數據
prototype HandleMoveDataError( NUMBER );
// 移動數據出錯處理
prototype ProcessBeforeDataMove();
// 移動文件數據前的處理
prototype ProcessAfterDataMove();
// 移動文件數據後的處理
prototype SetupRegistry();
// 安裝註冊,用戶可在此加入一些代碼,通常用於對註冊表的操作
prototype SetupFolders();
// 安裝生成快捷方式,通常用戶可在此加入生成快捷方式的代碼
prototype CleanUpInstall();
// 安裝完成後清除臨時文件
prototype SetupInstall();
// 安裝的實際過程
prototype SetupScreen();
// 設置安裝過程的屏幕顯示(包括背景顏色,字體等)
prototype CheckRequirements();
// 檢查安裝需求(包括硬盤空間,操作系統平臺等)
prototype DialogShowSdWelcome();
// 顯示“歡迎”對話框窗口
prototype DialogShowSdLicense();
// 顯示許可信息的對話框
prototype DialogShowSdRegisterUserEx();
// 顯示用戶安裝註冊的對話框
prototype DialogShowSdAskDestPath();
// 顯示“安裝路徑選擇”對話框
prototype DialogShowSdSetupType();
// 顯示“安裝類型選擇”對話框
prototype DialogShowSdComponentDialog2();
// 當用戶選擇“定製”安裝時,用於顯示供用戶選擇的組件的對話框
prototype DialogShowSdSelectFolder();
// 顯示快捷方式文件夾選擇的對話框
prototype DialogShowSdFinishReboot();
// 顯示“安裝完成重啓動”對話框
編程實例:
1.怎樣在進度條左上角顯示當前安裝的文件
在function SetupScreen()中加入以下語句
Enable( INDVFILESTATUS );
2.怎樣改變窗口背景色
SetColor( BACKGROUND, **** )函數可以改變窗口背景色,在適當的位置加上它即可,其中第二個變量可 以爲以下值:
BK_BLUE BK_MAGENTA BK_PINK BK_YELLOW
BK_GREEN BK_ORANGE BK_RED
以上幾種爲漸變色
BK_SOLIDBLACK BK_SOLIDMAGENTA BK_SOLIDRED
BK_SOLIDBLUE BK_SOLIDORANGE BK_SOLIDWHITE
BK_SOLIDGREEN BK_SOLIDPINK BK_SOLIDYELLOW
同時第二個參數也可以用RGB來描述,如SetColor( BACKGROUND, RGB(0,0,255) )
3.怎樣在InstallShield5.0以下版本建立快捷方式
在InstallShield5.1以上版本可以可以在Resource窗口中建立,而在以前的版本必須用程序解決該問題, 如果現在有一文件RegPad.exe(安裝路徑爲用戶選定的),給該程序在“開始”->“程序”中加一個快捷 方式,具體實現程序如下:
function SetupFolders()
NUMBER nResult;
STRING svResult,szCommand;
STRING szName;
begin
szName = "RegPad.exe";
szCommand = TARGETDIR ^ szName ;
LongPathToQuote ( szCommand , TRUE );
AddFolderIcon ( FOLDER_PROGRAMS ^"RegPad1.0Beta","RegPad" ,
szCommand , TARGETDIR , "" , 0 , "" , REPLACE );
4.怎樣控制用戶序列號
在嚮導生成的框架程序中,定義了一個STRING型的全局變量svSerial,在SdRegisterUserEx()結束時將給 該值賦上用戶輸入的序列號,你對該變量進行判斷即可。
5.怎樣控制重新啓動計算機
只需加入以下語句
System ( SYS_BOOTWIN );
6.怎樣給Autoexec.bat或Config.sys加入語句
以下程序給Autoexec.bat加入一行語句
OpenFileMode ( FILE_MODE_APPEND );
OpenFile (nvFileHandle, "C://", "Autoexec.bat");
WriteLine ( nvFileHandle , "SET PATH=%PATH%;C://ORAWIN95//BIN" );
7.怎樣在安裝結束時允許用戶選擇是否打開Readme文件
假定Readme.txt文件已經複製到目標路徑,以下程序將顯示一個複選框,如果用戶選擇了,則用記事本打 開Readme.txt。
function DialogShowSdFinishReboot()
NUMBER nResult, nDefOptions;
STRING szTitle, szMsg1, szMsg2, szOption1, szOption2,szPathls;
NUMBER bOpt1, bOpt2;
begin
if (!BATCH_INSTALL) then
bOpt1 = TRUE;
bOpt2 = FALSE;
szMsg1 = "";
szMsg2 = "";
szOption1 = "閱讀Readme文件";
szOption2 = "";
nResult = SdFinish( szTitle, szMsg1, szMsg2, szOption1, szOption2, bOpt1, bOpt2 );
if bOpt1 = TRUE then
CopyFile ( "Readme.txt" , "Readme.txt" );
LaunchApp ( WINDIR^"Notepad.exe" , TARGETDIR^"Readme.txt" );
endif;
return 0;
endif;
..........
8.如何指定默認路徑
在function SetupInstall()中修改以下代碼,如默認目錄改爲C:/JttMis,見以下修改的代碼
if (bIs32BitSetup) then
svDir = WINDISK ^ "Jttmis";
else
svDir = WINDISK ^ "Jttmis"; // use short names
endif;
TARGETDIR = svDir;
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1265158