inno setup简介

  • Inno Setup是一个免费的安装制作软件,小巧、简便、精美是其最大特点,支持pascal脚本,能快速制作出标准Windows2000风格的安装界面,足以完成一般安装任务。
  • inno setup下载

常量介绍

  • {app}:用户在安装向导中的选择目标位置页面中选定的应用程序目录。在安装时需要指定安装目录,你指定的安装目录是什么,这个值就是什么
  • {pf}:程序文件。系统的 Program Files 目录的路径。如果是32位程序,那这个值就是C:\Program Files (x86)
  • {commondesktop}:桌面文件夹的路径

安装脚本段

[setup]

  • 该段包含用于安装程序和卸载程序的全局设置。某些指令对于你创建的任何安装程序都是必需的

    • AppName:这是一个必需的指令,用以指定你正在安装的应用程序的标题
    • AppVersion:该指令指定被安装应用程序的版本号
    • DefaultDirName:这个必需的指令值是用于选择目标位置向导页面中的默认目录名,通常它用一个目录常量作为前缀。
    • OutputDir:编译后的安装包输出目录
    • OutputBaseFilename:编译后安装包文件名
    • UninstallFilesDir:卸载程序的文件路径
    • Uninstallable:表示卸载程序释放包含在安装程序中。默认为yes
    • CreateUninstallRegKey:安装后是否在控制面版中显示。默认为yes
    • DisableWelcomePage:设置为no,表示显示欢迎向导页面
    • Compression:指定要在文件中使用的压缩方法,以及压缩标准。较高标准压缩较好,但压缩的时间较长,而且在压缩/解压缩也需要更多内存。可取值(zip zip/1zip/9 bzip bzip/1bzip/9 lzma lzma/fast lzma/normal lzma/max lzma/ultra lzma/ultra64 lzma2 lzma2/fast lzma2/normal lzma2/max lzma2/ultra lzma2/ultra64 none)。如果没有特殊要求,这个字段可以不指定,使用默认的压缩算法就可以。
      • zip 是属于 .zip 文件类型(“deflate”)的压缩方法。它在压缩和解压缩时最快,而且需要的内存也很低(在标准 9 时压缩和解压缩小于 1 MB),但与其它支持的压缩方法比较几乎不压缩。如果未指定压缩级别,则它的默认值为 7
      • bzip 是通过使用 bzip2 [external link] 压缩器的压缩方法。它的压缩要比 zip 压缩好,但通常在压缩和解压缩时较慢。如果未指定压缩级别,则它的默认值为 9。
      • lzma 是通过使用 7-Zip LZMA [external link] 压缩器的压缩方法。它比 zip 和 bzip 且有更高的的压缩率。可是,根据使用的压缩标准,它在压缩时很慢,且消耗更多的内存。如果未指定压缩级别,则它的默认值为 max。
      • lzma2 是通过使用 7-Zip LZMA2 [external link] 压缩器的压缩方法。LZMA2 是 LZMA 的修改版,它对不可压缩的数据提供一个更好的压缩比(随机数据扩展约0.005%,与原 LZAM 比较为1.35%),并且可随意并行压缩大型文件的多个部件,大大提高了压缩速度,但有可能减少压缩比。像 LZMA 一样,它可能会消耗大量的内存。如果未指定压缩级别,则它的默认值为 max。
    • WizardImageFile:指定显示在安装程序向导左边的位图文件名
    • PrivilegesRequired:该指令的作用取决于用户运行哪个版本的 Windows。当设置为 admin (默认值)或 poweruser 时,安装程序将始终以管理员权限运行。当设置为 lowest 时,安装程序不会要求使用管理权限运行,即使它是由管理员组的成员启动。
    • OutputManifestFile:当设置该指令时,编译器将创建一个清单文件,详述有关文件编译到安装程序的信息。该文件将创建在 output 目录中,除非包含一个路径。
      • OutputManifestFile=Setup-Manifest.txt
    • VersionInfoCompany:指定安装程序版本信息中的公司名的值。如果 UseSetupLdr 被设置为 no,则该设置不起作用。
    • VersionInfoCopyright:指定安装程序版本信息的版权值。如果 UseSetupLdr 被设置为 no,则该设置不起作用。
    • VersionInfoDescription:指定安装程序版本信息的文件描述值。如果 UseSetupLdr 被设置为 no,则该设置不起作用。
    • VersionInfoProductName:指定安装程序版本信息产品名称值。如果 UseSetupLdr 被设置为 no,则该设置不起作用。
    • VersionInfoProductTextVersion:指定安装程序版本信息的文字产品的版本值。如果 UseSetupLdr 被设置为 no,则该设置不起作用。
    • AlwaysRestart:当设为 yes 时,安装程序不管是否需要,总是在安装结束时提示用户重新启动系统(例如,因为 [Files] 段条目带有 restartreplace 标记)。
    • AlwaysShowComponentsList:当该指令设置为 yes,安装程序将总是显示定制安装的组件列表。如果这个设置为 no,安装程序将只在用户在类型列表中选择自定义类型时才显示组件列表。
    • AlwaysShowDirOnReadyPage:当该指令设置为 yes,安装程序将总是在准备安装向导页面设置列表中显示选择的目录。如果该指令设置为 no,安装程序在 DisableDirPage 设为 yes 的情况下,将不显示目录。
    • AlwaysShowGroupOnReadyPage:当该指令设置为 yes,安装程序将总是在准备安装向导页面设置列表中显示选择的开始菜单文件夹名。如果该指令设置为 no,安装程序在 DisableProgramGroupPage 设为 yes 的情况下,将不显示开始菜单文件夹名。如果安装程序不创建开始菜单文件夹,该指令将被忽略。
    • AppendDefaultDirName:对话框中显示文件夹时,安装程序自动在新的路径名最后附加 DefaultDirName。例如,如果 DefaultDirName 是“{pf}\My Program”,以及在单击选择时选择了“Z:\”,那么新的路径变成“Z:\My Program”。设置该指令为 no 可以禁用上述的动作。在设置为 no 时,在单击“浏览…”弹出的对话框中会出现“新建文件夹”按钮。
    • AppendDefaultGroupName:按默认值,当在选择开始菜单文件夹向导页面单击“浏览…”按钮在显示的对话框中显示文件夹时,安装程序自动在新的路径名最后附加 DefaultGroupName。例如,如果 DefaultGroupName 是“My Program”,以及在单击选择时选择了“Accessories”,那么新的路径变成“Accessories\My Program”。设置该指令为 no 可以禁用上述的动作。在设置为 no 时,在单击“浏览…”弹出的对话框中会出现“新建文件夹”按钮。
    • AppComments:该字串被显示在“控制面板”程序的添加/删除程序的“支持”对话框中。该值可以包含常量。
    • AppContact:该字串被显示在“控制面板”程序的添加/删除程序的“支持”对话框中。该值可以包含常量。
    • AppPublisher:该字串被显示在“控制面板”程序的添加/删除程序的“支持”对话框中。该值可以包含常量。
    • AppPublisherURL:连接到指定的 URL,显示 “控制面板” 添加/删除程序的 “支持程序” 对话框。该值可以包含常量。

[Types]

  • 这个段是可选的。它用来定义安装程序将显示在选择组件向导页面的所有安装类型。
    • Name : 类型的内部名称。用于定义 [Components] 段中组件参数,告诉安装程序组件属于哪个类型。
    • Description : 类型的描述,可以包含常量。这个描述在安装期间显示。
    • Flags : 该参数是额外选项设置。可设置为iscustom。告诉安装程序这个类型是自定义类型。每当结束时用户在安装期间手动改变了组件选择,安装程序就将安装类型设置为自定义类型。请注意,如果你未定义自定义类型,安装程序将只允许用户选择一个安装类型,并且不能再手动选择/取消选择组件。

[Components]

  • 这个段是可选的。它定义安装程序向导的选择组件页面中显示的所有组件,以便于用户定制安装类型。
    • Name:组件的内部名称。
    • Description:组件的描述,可以包含常量。这个描述用于在安装期间显示给最终用户参考。
    • Types:用空格隔开所属组件的类型列表。如果最终用户从这个列表中选择了一个类型,这个组件将被安装。
    • ExtraDiskSpaceRequired : 这个组件所需要的额外磁盘空间,类似于 [Setup] 段中的 ExtraDiskSpaceRequired
    • Flags:该参数是额外选项设置。多个选项可用空格隔开。支持下列选项:
      • checkablealone:指定当一个组件的子组件选中时,该组件是否可以选中。按默认值,如果没有 Components 参数直接引用到该组件,未选中所有子组件将会使该组件变成未选中状态。
      • dontinheritcheck:指定当该组件的上级被选中时,该组件应该不自动变成已选中状态。这对顶层的组件不影响,且不能与 exclusive 标记组合使用。
      • exclusive:告诉安装程序这个组件与它的也使用 exclusive 标记的同级组件是互相排斥的。
      • fixed:告诉安装程序这个组件不能在安装期间被最终用户手动选择或取消选择。
      • restart:告诉安装程序如果用户安装了这个组件,将询问用户重新启动系统,不管它是不是需要(例如,因为 [Files] 段条目用了 restartreplace 标记)。有点象 AlwaysRestart,但不是每个组件。
      • disablenouninstallwarning:如果这个组件已经安装在用户机器中,重新安装时在用户取消这个组件选择后,这条标记告诉安装程序不警告用户不卸载该组件。考虑到你的组件的复杂性,你可以尝试使用 [InstallDelete] 段和该标记为自动“卸载”取消选定的组件。

[Icons]

  • 这个可选段定义所有创建在开始菜单和/或其它位置(比如桌面)的快捷方式。
    • Name:要创建的快捷方式的名称和位置。
    • Filename:快捷方式的命令行文件名,通常用一个目录常量开头。就是桌面快捷方式要执行的程序路径
    • Parameters:快捷方式的可选命令行参数,可以包含常量
    • WorkingDir:该快捷方式的工作(或启动)目录,它指定程序的初始当前目录。此参数可以包括常量。
    • IconFilename:要显示的自定义图标文件名。就是桌面快捷方式图标的位置和文件名。

[Files]

  • 这是定义安装程序安装文件到用户系统中的可选文件段
    • Source:源文件的位置和名称。打包的时候就从这里拷贝源文件进行打包。
    • DestDir:文件安装到用户系统中的目录。

[Registry]

  • 这个可选段用来定义一些你想用安装程序在用户系统中创建、修改或删除的注册表键/值
    • Root : 根键。 必须是下列值中的一个:
      • HKCR (HKEY_CLASSES_ROOT)
      • HKCU (HKEY_CURRENT_USER)
      • HKLM (HKEY_LOCAL_MACHINE)
      • HKU (HKEY_USERS)
      • HKCC (HKEY_CURRENT_CONFIG)
    • Subkey : 子键名。 可以包含常量。
    • ValueType : 值的数据类型。必须是下面中的一个(一般常用的是string和dword)
      • none : 默认设置,安装程序将创建一个没有键值的键,在这种情况下,ValueName 和 ValueData 参数将被忽略。
      • string : 安装程序将创建一个字串(REG_SZ)值。
      • expandsz : 安装程序将创建一个扩展字串(REG_EXPAND_SZ)值。
      • multisz : 安装程序将创建一个多行文本(REG_MULTI_SZ)值。
      • dword : 安装程序将创建一个32位整数(REG_DWORD)值。
      • qword : 安装程序将创建一个64位整数(REG_QDWORD)值。
      • binary : 安装程序将创建一个二进制(REG_BINARY)值。
    • ValueName : 该值的名称可以修改,可以包括常量。如果是空白,它将修改 “Default” 的值。
    • ValueData : 值对应的数据
      • 如果 ValueType 参数是 string,expandsz 或 multisz,这是这一个可以包含常量的字串。
      • 如果数据类型是 dword或qdword,这可以是一个十进制整数(例如“123”),一个十六进制整数(例如“$7B”)或解析为整数的常量
      • 如果数据类型是 binary,这可以是下列形式的十六进制字节序列: “00 ff 12 34”。
      • 如果数据类型是 none,将被忽略
    • Permissions : 指定登录注册表键 ACL(访问控制列表)的附加权限。
      • 如果你不熟悉 ACL 或你不知道为什么要列改,不推荐你使用这个参数,因为误用会导致重大的系统安全问题。
      • 支持的访问类型:
        • full : 同意“完全控制”许可,与 modify 相同(看下面),但又加上允许指定的用户/用户组获取注册表键所有权,并改变它的许可。通常保守的使用 modify 就足够了。
        • modify : 同意“修改”许可,允许指定的用户/用户组读取、修改和删除注册表值或子键。
        • read : 同意“读取和执行”许可,允许指定的用户/用户组读取注册表值或子键。
    • Flags : 该参数是额外选项设置。多个选项可用空格隔开。支持下列选项:
      • createvalueifdoesntexist:当指定了该标记,安装程序只在如果没有相同名称的值存在时创建值。如果值类型是 none,或如果你指定了 deletevalue 标记,该标记无效。
      • deletekey:当指定了该标记,安装程序在如果条目存在的情况下,先将尝试删除它,包括其中的所有值和子键。如果 ValueType 不是 none,那么它将创建一个新的键和值。为防止意外,安装期间如果 Subkey 是空白或只包含反斜杠符号,该标记被忽略。
      • deletevalue:当指定了该标记,安装程序在如果值存在的情况下,先将尝试删除值,如果 ValueType 是 none,那么在键不存在的情况下,它将创建键以及新值。
      • dontcreatekey:当指定了该标记,如果键已经在用户系统中不存在,安装程序将不尝试创建键或值。如果键不存在,不显示错误消息。一般来说,这个键与 uninsdeletekey 标记组合使用,在卸载时删除键,但安装时不创建键。
      • noerror:如果安装程序因任何原因创建键或值失败,不显示错误消息。
      • preservestringtype:这只在当 ValueType 参数是 string 或 expandsz 时适用。当指定该标记,并且值不存在或现有的值不是 string 类型(REG_SZ 或 REG_EXPAND_SZ),它将用 ValueType 指定的类型创建。如果值存在,并且是 string 类型,它将用先存在值的相同值类型替换。
      • uninsclearvalue:当卸载程序时,设置值数据为空字符(类型 REG_SZ)。该标记不能与 uninsdeletekey 标记组合使用。
      • uninsdeletekey:当卸载程序时,删除整个键,包含其中的所有值和子键。这对于 Windows 自身使用的键明显不是一个好方法。你只能用于你的应用程序特有的键中。为防止意外,安装期间如果 Subkey 是空白或只包含反斜杠符号,该标记被忽略。
      • uninsdeletekeyifempty:当程序卸载时,如果这个键的内部没有值或子键,则删除这个键。该标记可以与 uninsdeletevalue 组合使用。为防止意外,安装期间如果 Subkey 是空白或只包含反斜杠符号,该标记被忽略。
      • uninsdeletevalue:当程序卸载时删除该值。该标记不能与 uninsdeletekeyifempty 组合使用

[UninstallRun]

  • 用来指定在卸载第一步要执行的一些程序。
    • Filename:要执行的程序,或要打开的文件/文件夹。
    • Parameters:程序的可选命令行参数,可以包含常量。
    • Flag:该参数是额外选项设置。多个选项可用空格隔开
      • runhidden:如果指定了该标记,它将在隐藏窗口中运行程序。
      • hidewizard:如果指定了该标记,向导将在程序运行期间隐藏。

[UninstallDelete]

  • 该可选段定义你要卸载程序删除的任何附加文件或目录。
    • Type:指定卸载程序要删除的是什么
    • Name:要删除的文件或目录名称

Pascal脚本

事件函数

  • 安装事件函数
  • function InitializeSetup(): Boolean;
    • 在安装程序初始化时调用,返回 False 中断安装,否则返回 True。
  • procedure InitializeWizard();
    • 在启动时使用该事件函数来改变向导或向导页面。可以在这里完成欢迎界面的书写。
  • 卸载事件函数
  • function InitializeUninstall(): Boolean;
    • 返回 False 中断卸载,True 则反之。
  • procedure InitializeUninstallProgressForm();
    • 使用该事件函数对进展表单在启动时进行更改。你不能使用 InitializeUninstall 事件函数,因为在它被触发时该进展表单尚不存在。

简单脚本实例

  • 该脚本就可以制作一个简单的安装包
#define MyAppName "加密算法程序"
#define MyAppVersion "v1.0.0"

[setup]

; 安装应用程序的标题
AppName={#MyAppName}

; 安装应用程序版本号
AppVersion = {#MyAppVersion}

; 默认安装目录
DefaultDirName={pf}

; 控制面板中显示
CreateUninstallRegKey=yes

; 编译输出文件夹
OutputDir=C:\Users\lng\Desktop\inno\output

; 编译后的安装包文件名
OutputBaseFilename=encrypt_{#MyAppVersion}

; 允许安装过程中取消进程
AllowCancelDuringInstall=yes

;卸载程序路径
UninstallFilesDir={app}\encryptProgram

; 不显示开始菜单文档向导页面
DisableProgramGroupPage=yes

; 默认包含卸载程序在安装程序中
Uninstallable=yes

; 设置为no,表示显示欢迎向导页面
DisableWelcomePage=no

;指定显示在安装程序向导左边的位图文件名
WizardImageFile=C:\Users\lng\Desktop\inno\input\encrypt\img\R-C.bmp

[Icons]
;创建卸载程序
Name: "{group}\卸载"; Filename: "{app}\encryptProgram\unins000.exe"
;创建桌面图标
Name: {commondesktop}\{#MyAppName}; Filename: "{app}\encryptProgram\encrypt.exe"; WorkingDir: "{app}\encryptProgram"; IconFilename:"{app}\encryptProgram\img\logo.ico"

 [Files]
Source: "C:\Users\lng\Desktop\inno\input\encrypt\*"; DestDir: "{app}\encryptProgram"

[UninstallRun]
; 卸载前杀掉进程
Filename: taskkill;Parameters:"/t /f /im encrypt.exe";Flags: runhidden

[UninstallDelete]
; 卸载后删除安装目录下所有文件
Type: filesandordirs; Name: "{app}\encryptProgram"
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐