编辑
2024-07-30
编程技巧
00
请注意,本文编写于 60 天前,最后修改于 60 天前,其中某些信息可能已经过时。

目录

iss 语法参考
iss 文件结构
安装顺序
常用语法
宏定义
Setup 全局设置
Types 安装类型 + Components 安装组件
Types
Components
安装任务 Tasks
创建目录 Dirs
创建文件 Files
注册表 Registry
实用示例
创建注册表
安装时创建指定文件
卸载时删除指定文件

iss 语法参考

语法参考

语法使用参考

iss 文件结构

//宏定义段 [Setup] [Types] [Components] [Tasks] [Dirs] [Files] [Icons] [INI] [Languages] [Messages] [CustomMessages] [LangOptions] [Registry] [Run] [UninstallDelete] [UninstallRun] [Code]

安装顺序

[Dir] [Files] [Icons] [INI] [Registry] [Run](PS:对于使用Flags:postinstall的项需要特别注意)

常用语法

宏定义

宏定义即该脚本的全局变量

定义方式

#define MyAppName "MyApp" #define MyVersion "3.2.5.872"

调用方式

{#MyAppName} {#MyAppVersion}

Setup 全局设置

[Setup] //每个安装程序的AppId都不同,用于区分不同的程序 AppId={{E7388416-72E3-4077-9F1E-025AE6E5AAA1} //应用程序名称 AppName={#MyAppName} //应用程序版本 AppVersion={#MyAppVersion} AppPublisher={#MyAppPublisher} //默认安装路径,autopf 即当前用户的 programfiles 文件夹 DefaultDirName={autopf}\{#MyAppName} //安装/卸载后刷新文件关联信息 ChangesAssociations=yes //安装程序将不显示“选择开始菜单文件夹”向导页 DisableProgramGroupPage=yes //安装包输出目录路径 OutputDir={#BasePath}\release\AppSetup_{#MyAppVersion} //安装文件名称 OutputBaseFilename=AppV3ServerSetup_{#MyAppVersion} //压缩算法,基于压缩率和压缩/解压缩速度权衡,推荐zip算法 Compression=zip //是否启用固态压缩(将所有文件进行一次压缩,提升压缩率),默认no SolidCompression=yes //安装程序外观风格,默认classic WizardStyle=modern //以管理员权限安装 PrivilegesRequired=admin //对于安装包大小大于2,100,000,000 bytesd(2GB)的情况下,需要开启该选项,将生成一个setup.exe以及多个bin文件,分片 DiskSpanning=yes //安装包的图标 SetupIconFile=E:\部署环境\app\server\256.ico //鼠标悬浮-文件版本 VersionInfoVersion={#MyVersion} //鼠标悬浮-公司信息 VersionInfoCompany={#MyCompany} //鼠标悬浮-程序版本 VersionInfoProductVersion={#MyVersion} //鼠标悬浮-程序名称 VersionInfoProductName={#MyProductName} //鼠标悬浮-版权 AppCopyright={#MyAppCopyright}

Types 安装类型 + Components 安装组件

Types

安装程序将显示在向导的选择组件页面上的所有安装类型,一般用于自定义安装,与[Components]配合使用

Flags: iscustom 表示该类型是自定义类型。

用户在安装过程中手动更改组件选择时,安装程序都会将安装类型设置为自定义类型。

如果不定义自定义类型,安装程序将只允许用户选择安装类型,他们不能再手动选择/取消选择组件。

[Types] Name: "full"; Description: "完整安装所有组件" Name: "onlyInstallServiceA"; Description: "仅安装服务A" Name: "onlyInstallSeeviceB";Description:"仅安装服务B"; Name: "custom ";Description:"自定义安装组件"; Flags: iscustom

Components

这里的 Types 即上面定义过得 Types

[Components] Name: "main"; Description: "系统运行的最小单元"; Types: full ; Flags: fixed Name: "main\client"; Description: "服务A"; Types: onlyInstallServiceA custom; Flags: fixed Name: "main\server"; Description: "服务B"; Types: onlyInstallServiceB custom; Flags: fixed Name: "tools"; Description: "工具"; Types: full custom Name: "tools\backups"; Description: "数据备份工具"; Types: full custom Name: "tools\logs"; Description: "日志处理工具"; Types: full custom

image.png

安装任务 Tasks

安装程序在安装过程中将执行的所有用户可选任务

相关参数:

Components: 关联的组件,只有用户在上一步选择了该组件,这一步才会展示该任务

Flags:

  • exclusive : 是否其他任务互斥
[Tasks] Name: "resetDateDir"; Description: "重新选择数据存储目录"; GroupDescription: "修改配置信息:"; Name: "autoBackupCases"; Description: "安装前自动备份案件数据"; GroupDescription: "案件数据:"; Components: tools\backups Name: "restart"; Description: "安装完成后自动重启电脑"; Flags:exclusive Name: "autoOpenClient"; Description: "安装完成后自动打开客户端"; Flags:exclusive

创建目录 Dirs

安装程序除了用户选择的应用程序目录(该目录是自动创建的)之外要创建的任何其他目录

相关参数:

Attribs: 目录的其他属性

  • readonly, hidden, system, notcontentindexed

Flags:

  • deleteafterinstall

    • 如果安装之前目录不存在,且安装完成(或中止)后目录为空,则在安装完成(或中止)后将其删除。
  • uninsalwaysuninstall

    • 安装完成(或中止)后目录为空,则在安装完成(或中止)后将其删除。
  • uninsneveruninstall

    • 卸载程序不删除目录。默认情况下,如果[ Dirs ]部分中指定的目录为空,卸载程序将删除该目录。
[Dirs] Name: "{app}\data"; Attribs: readonly; Flags: "deleteafterinstall" Name: "{app}\bin"

创建文件 Files

安装程序要安装在用户系统上的文件

相关参数:

DestName:

  • 此参数指定文件在用户系统上安装时的新名称。默认情况下,安装程序使用 Source 参数中的名称,因此在大多数情况下不需要指定此参数。

Excludes:

  • 指定要排除的模式列表,以逗号分隔。此参数不能与 external 组合。
Source: "{#BasePath}\jre\*"; DestDir: "{app}\jre"; Excludes: "*.txt"; Flags: ignoreversion recursesubdirs createallsubdirs

Flags

  • confirmoverwrite: 在替换现有文件之前,始终要求用户确认。

  • createallsubdirs: 默认情况下编译器在递归搜索 Source 文件名/通配符(例如 jre*)时会跳过空目录。这个标志会在安装时创建这些目录,必须与recursesubdirs一起使用

  • deleteafterinstall: 安装后删除,如果安装前文件存在,且未替换,则不删除,不能与isreadme, regserver, regtypelib, restartreplace, sharedfile, uninsneveruninstall一起使用

  • dontverifychecksum: 安装程序在提取后,不验证文件校验和。对已编译到安装程序中但希望修改的文件使用此标志。与nocompression一起使用

  • isreadme: 文件是“ README”文件。安装中只有一个文件可以有这个标志。当一个文件有这个标志时,会出现一个选项,是否希望在安装完成后查看 README 文件。如果选择“是”,安装程序将打开该文件。对文件后缀有要求.txt, .wri, .doc

  • nocompression: 不进行压缩

  • onlyifdoesntexist: 只有当文件在用户系统上不存在时才安装该文件。

  • recursesubdirs: 递归Source指定的目录

  • replacesameversion:用户的系统中已经存在该文件,并且版本号相同时,并且文件内容不同时,才替换该文件。PS:默认行为情况下,不替换具有相同版本号的现有文件。

  • uninsneveruninstall:不删除文件

[Files] Source: "D:\code\local\打包\abc.reg"; DestDir: "{app}"; Flags: ignoreversion Source: "D:\code\local\打包\test.txt"; DestDir: "{app}"; Flags: ignoreversion Source: "D:\code\local\打包\test.mp4"; DestDir: "{app}"; Flags: ignoreversion

注册表 Registry

用于在用户系统中创建,修改或删除注册表健值

iss
[Registry] Root: HKLM; Subkey: "Software\YourCompanyName\YourApplicationName"; ValueType: string; ValueName: "SomeValue"; ValueData: "SomeData"; Flags: uninsdeletevalue; MinVersion: 0,6.1
  • Root指定了注册表项的根键
  • Subkey指定了注册表项的路径
  • ValueType指定了注册表值的类型
  • ValueName指定了注册表值的名称
  • ValueData指定了注册表值的数据
  • Flags指定了卸载时是否删除该注册表值
  • MinVersion指定了最低支持的Inno Setup版本
Root注册表Root key
HKCU(HKEY_CURRENT_USER)
HKLM(HKEY_LOCAL_MACHINE)
HKCR(HKEY_CLASSES_ROOT)
HKU(HKEY_USERS)
HKCC(HKEY_CURRENT_CONFIG)
HKA在管理员权限运行时为HKLM,否则为HKCU
ValueType注册表
none创建键,但不创建值
stringREG_SZ
expandszREG_EXPAND_SZ
multiszREG_MULTI_SZ
dwordREG_DWORD
qwordREG_QWORD
binaryREG_BINARY

实用示例

创建注册表

创建一个注册表,并修改里面的键值对

iss
[Registry] Root: HKLM; Subkey: "SOFTWARE\Demo"; Flags: uninsdeletekeyifempty Root: HKLM; Subkey: "SOFTWARE\Demo"; ValueType: dword; ValueName: "LOADCTRLS"; ValueData: $00000002; Flags: uninsdeletevalue Root: HKLM; Subkey: "SOFTWARE\Demo"; ValueType: string; ValueName: "DESCRIPTION"; ValueData: "xxxx模块"; Flags: uninsdeletevalue

安装时创建指定文件

举例:安装时,创建一个文件,内容为当前系统用户的默认下载路径

iss
[Code] function GetUsername: String; begin Result := ExpandConstant('{%USERNAME}'); end; procedure WriteProfileIni; var ProfileContent: TStringList; begin ProfileContent := TStringList.Create; try ProfileContent.Add('CurrentUserDownloadPath = "C:\Users\' + GetUsername + '\Downloads"'); ProfileContent.SaveToFile(ExpandConstant('{app}\profile.ini')); finally ProfileContent.Free; end; end; procedure CurStepChanged(CurStep: TSetupStep); begin if CurStep = ssPostInstall then begin WriteProfileIni; end; end;

卸载时删除指定文件

此处 {app} 为安装目录,打包程序能够自动识别

iss
[UninstallDelete] Type: filesandordirs; Name: "{app}\profile.ini"

本文作者:Silon汐冷

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!