使用脚本修改安装程序
InstallShield开发工具是采用InstallScript语言来运行一个安装程序的,你可以在InstallScript视图中来修改工程的脚本程序。如下图
InstallScript MSI脚本语言采用的事件驱动模式,也就是说,所有的函数调用是安装一定的顺序来进行的。
在你的工程中自己定义的函数都会出现你的函数树上,见上图,你可以单击树上函数名称来编辑或者修改该函数。
事件处理函数(event-handler functions)是不会出现你的函数树上,但是这些函数你的工程也可以使用,当然,此时我们使用的该函数的缺省代码,如果你想修改某个事件处理函数,你可以从事件列表中选择一个事件比如我们选择(Befor Move Data),然后选择一个关于这个事件的函数(比如Begin),然后这个函数的定义就会出现在你的脚本中,在你的脚本中会出现下面的代码:
////////////////////////////////////////////////////////////////////////////// // // FUNCTION: OnBegin // // EVENT: Begin event is always sent as the first event during installation. // ////////////////////////////////////////////////////////////////////////////// function OnBegin( ) begin // TO DO: you may change default non-UI settings, for example // // You may also perform your custom initialization steps, check requirements, etc. end; |
你可以在这个函数执行自己的代码了。
下面我们演示一下如何在这个函数添加一个MessageBox函数。
1)首先将begin和end间的//开头的都删除
2)按下CTRL+I弹出添加函数的向导。
3)在函数的种类列表中,选择"Built-in dialog box".
4)在函数名称中,选择"MessageBox".单击下一步。
5)In the szMsg field-which contains the message you want to display-type "Welcome to the Tutorial installation!" (including the quotation marks).
6)In the nType drop-down list-which specifies the type of message box to display-select INFORMATION.
7)Click Finish to paste your function call into the script.
最后,其实就是在你的OnBegin函数中添加了如下的代码:
function OnBegin( ) begin MessageBox ( "Welcome to the Tutorial installation!" , INFORMATION ); end; |
当你修改了你的脚本时,你就要重新编译它,这样,当你运行安装程序的时候,在弹出欢迎对话框之前就会弹出这个消息框。
InstallScript语言包含了大概250个函数用来处理相关的任务,详细内容参见帮助文档。
修改安装界面 处理用户的输入:
在你的安装脚本中,所有处理用户输入对话框的显示只在下面的四个函数中出现OnFirstUIBefore,这个函数里包含了用户第一次安装该程序,在复制文件之前的所有的对话框。
OnFirstUIAfter,这个函数包含用户第一次安装该程序,在复制文件之后所用到的对话框显示
OnMaintUIBefore,这个函数中包含了用户采用maintenance模式安装时,在复制文件之前的所用到的所有的对话框。
OnMaintUIAfter,这个函数中包含了用户采用maintenance模式安装,在复制文件之后所用到的对话框。
对于InstallScript MSI工程来说,其实这里最重要的还是OnFirstUIBefore and OnMaintUIBefore两个函数,用户无论是第一次安装还是maintenance安装,对话框显示都在这两个函数中,OnFirstUIBefore函数缺省的情形应该像下面这样吧。
Dlg_Start: // beginning of dialogs label Dlg_SdWelcome: szTitle = ""; szMsg = ""; nResult = SdWelcome( szTitle, szMsg ); if (nResult = BACK) goto Dlg_Start;
Dlg_SdCustomerInformation: szMsg = ""; szTitle = ""; nResult = SdCustomerInformation( szTitle, szName, szCompany, nUser ); if (nResult = BACK) goto Dlg_SdWelcome; |
阅读(1474) | 评论(0) | 转发(0) |