杉宫竹苑工作室

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2422|回复: 0

InstallShield 脚本编程基本语法

[复制链接]
发表于 2018-5-24 20:31:13 | 显示全部楼层 |阅读模式

正式会员享受无限制浏览网站功能和高速网盘下载,赶快加入本站吧!

您需要 登录 才可以下载或查看,没有账号?立即注册

x

  1. InstallShield脚本语言是类似C语言,利用InstallShield的向导或模板都可以生成基本的脚本程序框架,可以在此基础上按自己的意愿进行修改和添加。  
  2. 一.基本语法规则  
  3. 1.变量  
  4. BOOL布尔型值为TRUE(1)或FALSE(0)  
  5. CHAR字符型一字节长的(8bit)的字符  
  6. HWND窗口句柄用来存放窗口句柄  
  7. INT整型两字节长的整数  
  8. LIST列表型指向InstallShield列表,用ListCreate和ListDestroy  
  9. LONG扩展数值型  
  10. LPSTR扩展指针  
  11. NUMBER数值型存放四字节长的数值,范围从-2147483648到+2147483647  
  12. POINTER指针型  
  13. SHORT短数值型  
  14. STRING字符串型十分类似VC中的LPCTSTR  
  15.  变量如同标准的C语言,在使用前需要事先声名。变量通常在两个位置进行声名,一是主程序外部,这样的变量为全局变量,二是各函数的变量声名区,这样的变量是局部变量。  
  16. 2.操作符  
  17. 一般的与C语言相同操作符,在这里不做详解,以下主要介绍比较特殊的操作符,  
  18. (1)+,-,*,/  
  19. 以上四个操作符与C语言中意义和用法都相同。  
  20. (2)&&  
  21. 与操作,与C语言中用法相同,例:x1&&x2  
  22. (3)||  
  23. 或操作,与C语言中用法相同,例:x1||x2  
  24. (4)!  
  25. 非操作,与C语言中用法相同,例:!x1  
  26. (5)*  
  27. 指针操作,类似C语言中的*  
  28. (6)&,|,^,~,<<,>>  
  29. 分别为位与,位或,按位异或,按位取反,左移和右移,其意义和用法都与C语言中基本相同。  
  30. (7).  
  31. 该操作符用于结构,用来得到结构的子项,与Delphi的.用法类似,例如:  
  32. typedef SETTINGSREC  
  33. begin  
  34. BOOL bSwitchOn;  
  35. STRING szMssg[255];  
  36. INT nVal;  
  37. end;  
  38. SETTINGSREC settings;  
  39. program  
  40. settings.bSwitchOn=FALSE;  
  41. settings.szMssg="Off";  
  42. settings.nVal=0;  
  43. (8)=  
  44. 既可作为赋值号,同时也做等于符,例如:  
  45. str1="String";  
  46. if str1="String"then  
  47. endif;  
  48. (9)&  
  49. 取地址符,与C语言用法类似。  
  50. (10)<,>,=,<=,>=,!=  
  51. 分别表示小于,大于,等于,小于等于,大于等于,不等于  
  52. (11)+,^,%  
  53. 用于字符串的操作。  
  54. (12)->  
  55. 结构指针,与C语言中用法类似。  
  56. (13)@  
  57. 用于得到Resource窗口中定义的字符串,例:  
  58. szReferenceFile=svDir^@PRODUCT_KEY;  
  59. 3.函数  
  60. InstallShield的函数使用前同样需要声名,函数的参数传递方式十分类似C语言,例如下面的函数声名:  
  61. prototypeHandleMoveDataError(NUMBER);  
  62. 该声名中函数名为HandleMoveDataError,传递一个NUMBER类型的参数。调用该函数时也基本与C语言中相同。  
  63. 函数体的标准格式为:  
  64. function functionname(nResult)  
  65. //函数变量声名区  
  66. begin  
  67. //程序区  
  68. end;  
  69. 通常的函数返回一个NUMBER型的数。  
  70. 4.主程序结构  
  71. 主程序以program开始,以endprogram结尾,  
  72. 二.框架程序的基本结构  
  73. 程序开始为函数与变量的声明区  
  74. 通过向导建立的框架程序包含以下一些主函数:  
  75. prototype ShowDialogs();  
  76. //显示安装向导对话框  
  77. prototype MoveFileData();  
  78. //移动文件数据  
  79. prototypeHandleMoveDataError(NUMBER);  
  80. //移动数据出错处理  
  81. prototype ProcessBeforeDataMove();  
  82. //移动文件数据前的处理  
  83. prototype ProcessAfterDataMove();  
  84. //移动文件数据后的处理  
  85. prototype SetupRegistry();  
  86. //安装注册,用户可在此加入一些代码,通常用于对注册表的操作  
  87. prototype SetupFolders();  
  88. //安装生成快捷方式,通常用户可在此加入生成快捷方式的代码  
  89. prototype CleanUpInstall();  
  90. //安装完成后清除临时文件  
  91. prototype SetupInstall();  
  92. //安装的实际过程  
  93. prototype SetupScreen();  
  94. //设置安装过程的屏幕显示(包括背景颜色,字体等)  
  95. prototype CheckRequirements();  
  96. //检查安装需求(包括硬盘空间,操作系统平台等)  
  97. prototype DialogShowSdWelcome();  
  98. //显示“欢迎”对话框窗口  
  99. prototype DialogShowSdLicense();  
  100. //显示许可信息的对话框  
  101. prototype DialogShowSdRegisterUserEx();  
  102. //显示用户安装注册的对话框  
  103. prototype DialogShowSdAskDestPath();  
  104. //显示“安装路径选择”对话框  
  105. prototypeDialogShowSdSetupType();  
  106. //显示“安装类型选择”对话框  
  107. prototype DialogShowSdComponentDialog2();  
  108. //当用户选择“定制”安装时,用于显示供用户选择的组件的对话框  
  109. prototype DialogShowSdSelectFolder();  
  110. //显示快捷方式文件夹选择的对话框  
  111. prototype DialogShowSdFinishReboot();  
  112. //显示“安装完成重启动”对话框  
  113. 三、编程实例:  
  114. 1.怎样在进度条左上角显示当前安装的文件  
  115. 在function SetupScreen()中加入以下语句  
  116. Enable(INDVFILESTATUS);  
  117. 2.怎样改变窗口背景色  
  118. SetColor(BACKGROUND,****)函数可以改变窗口背景色,在适当的位置加上它即可,其中第二个变量可以为以下值:  
  119. BK_BLUE BK_MAGENTA BK_PINK BK_YELLOW  
  120. BK_GREEN BK_ORANGE BK_RED  
  121. 以上几种为渐变色  
  122. BK_SOLIDBLACK BK_SOLIDMAGENTA BK_SOLIDRED  
  123. BK_SOLIDBLUE BK_SOLIDORANGE BK_SOLIDWHITE  
  124. BK_SOLIDGREEN BK_SOLIDPINK BK_SOLIDYELLOW  
  125. 同时第二个参数也可以用RGB来描述,如  
  126. SetColor(BACKGROUND,RGB(0,0,255))  
  127. SetColor(BACKGROUND,RGB(0,128,128))  
  128. 3.怎样在InstallShield5.0以下版本建立快捷方式  
  129. 在InstallShield5.1以上版本可以可以在Resource窗口中建立,而在以前的版本必须用程序解决该问题,如果现在有一文件RegPad.exe(安装路径为用户选定的),给该程序在“开始”->“程序”中加一个快捷方式,具体实现程序如下:  
  130. function SetupFolders()  
  131. NUMBER nResult;  
  132. STRING svResult,szCommand;  
  133. STRING szName;  
  134. begin  
  135. szName="RegPad.exe";  
  136. szCommand=TARGETDIR^szName;  
  137. LongPathToQuote(szCommand,TRUE);  
  138. AddFolderIcon(FOLDER_PROGRAMS^"RegPad1.0Beta","RegPad",  
  139. szCommand,TARGETDIR,"",0,"",REPLACE);  
  140. 4.怎样控制用户序列号  
  141. 在向导生成的框架程序中,定义了一个STRING型的全局变量svSerial,在SdRegisterUserEx()结束时将给该值赋上用户输入的序列号,你对该变量进行判断即可。  
  142. 5.怎样控制重新启动计算机  
  143. 只需加入以下语句  
  144. System(SYS_BOOTWIN);  
  145. 6.怎样给Autoexec.bat或Config.sys加入语句  
  146. 以下程序给Autoexec.bat加入一行语句  
  147. OpenFileMode(FILE_MODE_APPEND);  
  148. OpenFile(nvFileHandle,"C://","Autoexec.bat");  
  149. WriteLine(nvFileHandle,"SETPATH=%PATH%;C://ORAWIN95//BIN");  
  150. 7.怎样在安装结束时允许用户选择是否打开Readme文件  
  151. 假定Readme.txt文件已经复制到目标路径,以下程序将显示一个复选框,如果用户选择了,则用记事本打开Readme.txt。  
  152. function DialogShowSdFinishReboot()  
  153. NUMBER nResult,nDefOptions;  
  154. STRING szTitle,szMsg1,szMsg2,szOption1,szOption2,szPathls;  
  155. NUMBER bOpt1,bOpt2;  
  156. begin  
  157. if(!BATCH_INSTALL)then  
  158. bOpt1=TRUE;  
  159. bOpt2=FALSE;  
  160. szMsg1="";  
  161. szMsg2="";  
  162. szOption1="阅读Readme文件";  
  163. szOption2="";  
  164. nResult=SdFinish(szTitle,szMsg1,szMsg2,szOption1,szOption2,bOpt1,bOpt2);  
  165. ifbOpt1=TRUEthen  
  166. CopyFile("Readme.txt","Readme.txt");  
  167. LaunchApp(WINDIR^"Notepad.exe",TARGETDIR^"Readme.txt");  
  168. endif;  
  169. return0;  
  170. endif;  
  171. ..........  
  172. 8.如何指定默认路径  
  173. 在function SetupInstall()中修改以下代码,如默认目录改为C:/JttMis,见以下修改的代码  
  174. if(bIs32BitSetup)then  
  175. svDir=WINDISK^"Jttmis";  
  176. else  
  177. svDir=WINDISK^"Jttmis";//useshortnames  
  178. endif;  
  179. TARGETDIR=svDir;  
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SgzyStudio

GMT+8, 2024-5-14 18:55 , Processed in 0.104779 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表