InstallShield腳本語言的編寫

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
 

發佈了22 篇原創文章 · 獲贊 1 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章