本文转载自:http://blog.csdn.net/yushanddddfenghailin/article/details/17250933

事件函数(2)

function CheckPassword(Password: String): Boolean;

如果安装程序在Pascal 脚本中发现该函数,它自动显示密码页并调用CheckPassword检查密码。返回True 表示接受密码,返回False拒绝。测试代码如下:

function CheckPassword(Password: String): Boolean;

begin

if Password='castor' then

result:=true;

end;

在安装过程中将会出现询问安装密码的页面,如果输入错误将会出现下面的对话框:

为了避免在 [Code] 段内部贮存真实的密码,最好使用其他的信息进行比较,例如使用GetMD5OfString(Password)计算实际密码的MD5值保护实际密码。

function NeedRestart(): Boolean;

如果返回True,安装程序在安装结束时提示用户重启系统,False则不提示。测试代码如下:

function NeedRestart(): Boolean;

begin

result:=True;

end;

在安装完成之后的finish页面,将会出现如下的选项:

function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;

如果脚本中存在该函数,则在Ready to Install页面变为活动页的时候自动调用该函数,该函数返回一段文本,该文本显示于Ready to Install页面中的设置备注中,并且该文本将用NewLine参数分割为一个单独的多行字符串,参数Space指代空格,测试是六个,其它参数将包含安装程序用于设置段的字符(可能是空的)。例如MemoDirInfo参数包含选择目录段的字符串。测试代码如下:

function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoComponentsInfo, MemoTasksInfo: String): String;

var

res: String;

begin

res:='UpdateReadyMemo Function is here'+NewLine+'This is the Second Line';

res:=res+Space+'And with Six Spaces';

res:=res+NewLine+'MemoUserInfoInfo'+MemoUserInfoInfo;

res:=res+NewLine+'MemoDirInfo'+MemoDirInfo;

res:=res+NewLine+'MemoTypeInfo'+MemoTypeInfo;

res:=res+NewLine+'MemoComponentsInfo'+MemoComponentsInfo;

res:=res+NewLine+'MemoComponentsInfo'+MemoComponentsInfo;

res:=res+NewLine+'MemoTasksInfo'+MemoTasksInfo;

Result:=res;

end;

运行后在安装前会出现确认页面:

标记黄色文字下面是各个参数的内容。

procedure RegisterPreviousData(PreviousDataKey: Integer);

本过程实现在自定义向导页中贮存用户输入的设置,在脚本中放入本函数,并调用SetPreviousData(PreviousDataKey, ...)替换它,每次设置一个。

function CheckSerial(Serial: String): Boolean;

该函数将在用户信息向导页中自动出现一个序列号对象 (前提是[Setup]段中使用UserInfoPage=yes)。返回True表示接受序列号,返回False 拒绝。注意:当使用序列号时,该软件并没有被加密,而且Inno Setup源代码是免费获取的,有经验的人从安装程序中删除序列号保护并不是很困难的事。本函数只是方便用户在你的应用程序中仔细检查输入的序列号 (贮存在{userinfoserial}常量)。测试代码如下:

function CheckSerial(Serial: String): Boolean;

begin

if Serial='ABCDEF-1234567890' then

Result:=True;

end;

在安装过程中将会出现一个页面,如下:

如果Serial Number不正确,Next按钮将会无效,只有正确的序列号才能使得Next按钮有效,再次说明:不要指望使用这种方法保护你的软件。

function GetCustomSetupExitCode: Integer;

返回一个非零值,命令安装程序返回一个自定义退出代码,本函数只在安装程序运行完成并且退出代码已是零时才调用。常见的退出代码如下:

代码

说明

0

安装程序成功完成

1

安装程序初始化失败

2

用户在实际安装前点击取消,或者在开始的“这将安装……”时选择否

3

当准备到下一个安装阶段的时候发生致命错误,只有在比较极端的情况下发生这种错误,例如内存耗尽。

4

实际安装过程中发生致命错误

5

用户在实际安装过程中点击取消或者在“终止-重试-忽略”对话框中点击了终止

6

安装程序被调试器强制终止

7

准备安装阶段发现安装无法进行

8

准备安装阶段发现安装无法进行,并且系统需要重启来解决问题

例如在用Inno Setup调试编译后的安装文件时,按下Ctrl+F2后,下面的调试输出将会提示如下:

退出代码为6,可见安装程序被调试器强制终止。

function PrepareToInstall(var NeedsRestart: Boolean): String;

在与安装阶段返回一个非空字符串命令安装程序停止,该字符串将会作为错误消息,设置NeedsRestart为True将要求用户重启系统,该函数只在安装程序发现不能继续下去的时候才被调用。

(转)Inno Setup入门(十三)——Pascal脚本(2)的更多相关文章

  1. Inno Setup入门(一)——最简单的安装脚本

    地址:http://379910987.blog.163.com/blog/static/3352379720110238252326/ 一个最简单的安装脚本: 1.最简单的安装文件脚本: [setu ...

  2. Inno Setup入门(十一)——完成安装后执行某些程序

    Inno Setup入门(十一)——完成安装后执行某些程序 2011-02-16 16:24:23|  分类: Inno Setup |  标签:inno  setup   |举报 |字号 订阅   ...

  3. Inno Setup入门(十六)——Inno Setup类参考(2)

    Inno Setup入门(十六)——Inno Setup类参考(2) http://379910987.blog.163.com/blog/static/33523797201112755641236 ...

  4. Inno Setup入门(十三)——Pascal脚本(2)

    分类: Install Setup 2013-02-02 11:26 794人阅读 评论(0) 收藏 举报 事件函数(2) function CheckPassword(Password: Strin ...

  5. Inno Setup入门(十三)——Pascal脚本(2)

    事件函数(2) function CheckPassword(Password: String): Boolean; 如果安装程序在Pascal 脚本中发现该函数,它自动显示密码页并调用CheckPa ...

  6. Inno Setup入门(十二)——Pascal脚本(1)

    事件函数(1) Inno Setup支持以下函数和过程. function InitializeSetup(): Boolean; 该函数在安装程序初始化时调用,返回False 将中断安装,True则 ...

  7. (转)Inno Setup入门(十二)——Pascal脚本(1)

    本文转载自:http://blog.csdn.net/yushanddddfenghailin/article/details/17250917 事件函数(1) Inno Setup支持以下函数和过程 ...

  8. Inno Setup入门(十二)——Pascal脚本(1)

    事件函数(1) Inno Setup支持以下函数和过程. function InitializeSetup(): Boolean; 该函数在安装程序初始化时调用,返回False 将中断安装,True则 ...

  9. Inno Setup入门(十九)——Inno Setup类参考(5)

    : Install Setup 2013-02-02 11:29 377人阅读 评论(0) 收藏 举报 单选按钮 单选按钮在安装中也很常见,例如同一个程序可以选择安装不同的性质的功能,例如选择32位或 ...

随机推荐

  1. tornado源码分析系列一

    先来看一个简单的示例: #!/usr/bin/env python #coding:utf8 import socket def run(): sock = socket.socket(socket. ...

  2. LeetCode OJ:Search in Rotated Sorted Array(翻转排序数组的查找)

    Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 migh ...

  3. JSP和JS的区别

    从本科毕业设计开始就一直困扰我,jsp和js这两者的区别,一直处于迷糊状态,也没有搞清楚.今天就简单的介绍下两者的区别. 1.JSP全称是java server page    JS全称是javaSc ...

  4. 更换pip源,解决pip install安装包慢的问题

    而pip是很强大的Python包安装工具,但是由于国外官方pypi经常被墙,导致不可用,所以最好是将使用的pip源更换一下,这样就能解决被墙导致的装不上库的问题.网上有很多可用的源,例如豆瓣:http ...

  5. IOS开发 多线程编程 - NSThread

    每个iOS应用程序都有个专门用来更新显示UI界面.处理用户的触摸事件的主线程,因此不能将其他太耗时的操作放在主线程中执行,不然会造成主线程堵塞(出现卡机现象),带来极坏的用户体验.一般的解决方案就是将 ...

  6. IOS开发Block详细用法

    Block简介:       ios4.0系统已开始支持block,在编程过程中,blocks被Obj-C看成是对象,它封装了一段代码,这段代码可以在任何时候执行.Blocks可以作为函数参数或者函数 ...

  7. dhcp snooping、ARP防护、

    应用场景 无线客户端流动性很大和不确定,比如在外来人员比较多的地方:广场.大厅.会议室和接待室等等.使用该方案可以有效地避免因为无线端出现私设IP地址导致地址冲突或者客户端中ARP病毒发起ARP攻击的 ...

  8. 利用索引与不用索引区别(profiles)

    1.定义 对数据库表的一列或多列的值进行排序的一种结构(Btree方式)=(相当于二分查找法) 2.优点 加快数据检索速度 3.缺点 1.占用物理存储空间 2.当对表中数据更新时,索引需要动态维护,降 ...

  9. MySQL 5.6.30 升级到5.7.10

    MySQL 5.6.30 升级到5.7.10 注意,这种方式的前提是数据文件没有和软件目录在一起,如果在一起,需要停止数据库后先移动数据文件 1.解压5.7.10包到/usr/local2.停止当前的 ...

  10. erl_0017 《硝烟中的erlang》 读书笔记004 “锁和阻塞”

    如果某个进程需要持续地接收新任务,那么其在执行耗时过长的锁或者阻塞操作时,就会出现问题. 最为常见的例子之一就是:某个进程使用了TCP socket,阻塞在了接收新的连接或者等待消息上面.在执行此类阻 ...