//宏定义段 [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] //每个安装程序的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}
安装程序将显示在向导的选择组件页面上的所有安装类型,一般用于自定义安装,与[Components]
配合使用
Flags: iscustom
表示该类型是自定义类型。
用户在安装过程中手动更改组件选择时,安装程序都会将安装类型设置为自定义类型。
如果不定义自定义类型,安装程序将只允许用户选择安装类型,他们不能再手动选择/取消选择组件。
[Types] Name: "full"; Description: "完整安装所有组件" Name: "onlyInstallServiceA"; Description: "仅安装服务A" Name: "onlyInstallSeeviceB";Description:"仅安装服务B"; Name: "custom ";Description:"自定义安装组件"; Flags: iscustom
这里的 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
安装程序在安装过程中将执行的所有用户可选任务
相关参数:
Components
: 关联的组件,只有用户在上一步选择了该组件,这一步才会展示该任务
Flags
:
[Tasks] Name: "resetDateDir"; Description: "重新选择数据存储目录"; GroupDescription: "修改配置信息:"; Name: "autoBackupCases"; Description: "安装前自动备份案件数据"; GroupDescription: "案件数据:"; Components: tools\backups Name: "restart"; Description: "安装完成后自动重启电脑"; Flags:exclusive Name: "autoOpenClient"; Description: "安装完成后自动打开客户端"; Flags:exclusive
安装程序除了用户选择的应用程序目录(该目录是自动创建的)之外要创建的任何其他目录
相关参数:
Attribs
: 目录的其他属性
Flags
:
deleteafterinstall
uninsalwaysuninstall
uninsneveruninstall
[Dirs] Name: "{app}\data"; Attribs: readonly; Flags: "deleteafterinstall" Name: "{app}\bin"
安装程序要安装在用户系统上的文件
相关参数:
DestName
:
Excludes
:
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
用于在用户系统中创建,修改或删除注册表健值
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 | 创建键,但不创建值 |
string | REG_SZ |
expandsz | REG_EXPAND_SZ |
multisz | REG_MULTI_SZ |
dword | REG_DWORD |
qword | REG_QWORD |
binary | REG_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 许可协议。转载请注明出处!