默认主题优化
1 | #define MyAppId "{{1AC4D338-0D28-47E4-9FC7-18929EDDF90D}" |
引用DLL整体配置
整体配置大致如下,方便复制修改:
1 | ; 该执行目录为 setup.iss 所在的目录,请注意拼接相对目录 |
常见问题
请求的操作需要提升
Inno Setup CreateProcess failed;code 740 请求的操作需要提升
这是因为打包的程序默认需要以管理员身份运行
下载之后打开Resource Hacker
,然后打开Inno Setup
的安装目录,找到SetupLdr.e32
文件,打开。
SetupLdr.e32在InnoSetup的根目录
找到Manifest下的文件打开
找到
1 | <requestedExecutionLevel level="asInvoker" uiAccess="false"/> |
改为
1 | <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> |
点击F5编译脚本,重新打包运行发现已经不再报错了。
生成快捷方式
新版本6.0.5已经没有该问题了
默认生成的打包的代码是不会生成桌面快捷方式的,所以要想生成桌面快捷方式
Tasks配置段中修改为如下:
1 | [Tasks] |
其中Flags: checkablealone
,会在桌面没有快捷方式时自动勾选创建桌面快捷方式
。
文件排除
https://jrsoftware.org/ishelp/index.php?topic=filessection
示例:
1 | Source: "*"; Excludes: "*.~*" |
忽略配置
1 | [Files] |
注意
多个路径之间用,分割
控制面板卸载不显示图标
1 | [Setup] |
删除旧的快捷方式
删除旧的快捷方式
1 | [InstallDelete] |
删除安装目录下的文件
1 | [InstallDelete] |
其中
{autodesktop}
桌面{app}
安装目录{group}
开始菜单
清空图标缓存
如果我们打包时图标设置错了,就算更换了图标重新打包,桌面上的图标还是之前的,这是因为系统图标缓存导致,清空一下图标缓存就行了。
新建 清空图标缓存.bat
,用管理员运行即可。
1 | cd /d %userprofile%\AppData\Local\Microsoft\Windows\Explorer |
常用技巧
脚本引用
1 | #include ".\include\code.iss" |
生命周期
inno setup基本的过程和函数。
1 | //该过程在开始的时候改变向导或者向导页,不要指望使用InitializeSetup函数实现改变向导页的功能,因为InitializeSetup函数触发时向导窗口并不存在。 |
代码注释
1 | ; 实例 —— ; 分号 |
注释符号均在英文输入法状态下输入
换行符号
在 [Messages] 换行符号为%n
在 MsgBox 中换行符号为 #13#10
,#13
为回车字符
颜色代码
(1)一个值形如 $bbggrr, 这里的 rr, gg 和 bb 指定了两位的亮度值(以十六进制表示)分别为红色,绿色和蓝色。
(2)预定义的颜色名称:
clBlack(黑色),clMaroon(暗红),clGreen(绿色),clOlive(橄榄绿),
clNavy(深蓝),clPurple(紫色),clTeal(深青),clGray(灰色),
clSilver(浅灰),clRed(红色),clLime(浅绿),clYellow(黄色),
clBlue(蓝色),clFuchsia(紫红),clAqua(青绿),clWhite(白色)。
安装
CurStepChanged所对应的全部状态:3种
CurStep=ssInstall –是在程序实际安装前(所有配置都准备好了)*
CurStep=ssPostInstall –是实际安装完成后*
CurStep=ssDone–是在一次成功的安装完成后、安装程序终止前(即点击*finish按钮后执行)
这些状态可以通过InnoSetup自带的过程(一种跟函数差不多的东西)来判断,然后执行一些自定义的动作:
用法如下:
1 | procedure CurStepChanged(CurStep: TSetupStep); |
卸载
CurUninstallStep 所对应的所有状态 4种
CurStep=usAppMutexCheck 在卸载前判断是否已经运行了实例
CurStep=usUninstall 卸载前的准备
CurStep=usPostUninstall 卸载完成后,
CurStep=usDone 卸载完成后,卸载程序终止前,也是点击finish之后执行的
同理:卸载的时候也有对应的过程来处理
1 | procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); |
向导
0、 向导页面
Innosetup的预定义向导页(就是安装时让我们点下一步的那些页面)
3.1.wpWelcome –欢迎页面
3.2. wpLicense –协议页面
3.3. wpPassword –密码页面
3.4. wpInfoBefore
3.5. wpUserInfo
3.6. wpSelectDir –选择目录页面
3.7. wpSelectComponents –选择组件页面
3.8. wpSelectProgramGroup –选择程序组页面
3.9. wpSelectTasks
3.10. wpReady
3.11. wpPreparing
3.12. wpInstalling –估计是安装中的进度条页面
3.13. wpInfoAfter
3.14. wpFinished –finish页面
向导变更时执行
1 | [Code] |
1 、如何让协议许可页面默认选中我同意按钮
1 | [code] |
2、自定义安装程序右上角图片大小1
2
3
4
5
6
7
8[code]
procedure InitializeWizard();
begin
WizardForm.WizardSmallBitmapImage.width:=150; //设置页眉图片的大小
WizardForm.WizardSmallBitmapImage.left:=WizardForm.width-150; //设置左边页眉留出的空隙
WizardForm.PAGENAMELABEL.width:=0; //设置标题文字显示的大小
WizardForm.PAGEDESCRIPTIONLABEL.width:=0; //设置标题文字显示的大小
end;
或者
1 | //自定义安装向导小图片 |
3、自定义BeveledLabel显示
1 | [code] |
4、自定义安装向导图片
1 | [code] |
5、显示出组件选择框
1 | [Types] |
6、定义[Messages]的颜色
1 | [code] |
7、不显示一些特定的安装界面
1 | [code] |
wpReady 是准备安装界面
PageID查询 INNO帮助中的 Pascal 脚本: 事件函数常量
预定义向导页 CurPageID 值
wpWelcome, wpLicense, wpPassword, wpInfoBefore, wpUserInfo, wpSelectDir, wpSelectComponents, wpSelectProgramGroup, wpSelectTasks, wpReady, wpPreparing, wpInstalling, wpInfoAfter, wpFinished
8、在运行卸载程序前显示弹出式消息
1 | [code] |
9、安装、卸载时判断是否程序正在运行,卸载完成时自动打开网页
1 | [code] |
10、 删除文件和删除文件夹
1 | //删除文件 用 DeleteFile 只能删除一个文件,不能使用通配符来删除多个文件 |
11、BorderStyle
1 | TFormBorderStyle = (bsNone, bsSingle, bsSizeable, bsDialog, bsToolWindow, bsSizeToolWin); |
无边界式(bsNone) ,单边固定式(bsSingle),双边可变式(bsSizeable),对话框式(bsDialog)
12、if else
1 | function NextButtonClick(CurPageID: Integer): Boolean; |
13、安装结束界面增加“设为首页”选项
1 | [Tasks] |
14、添加“关于”和网站链接按钮
1 | [Code] |
15、去掉安装程序左上角“关于安装程序”的代码
1 | procedure InitializeWizard(); |
或者
1 | procedure InitializeWizard(); |
16、自定义BeveledLabel文字
1 | [Messages] |
17、自定义安装程序界面左上角“安装”文字
1 | [message] |
18、自定义安装程序版本号
1 | VersionInfoVersion=1.1 |
默认主题修改方法
首先我们看一下属性 方便修改页面
1 | TWizardForm = class(TSetupForm) |
页面组件图
注意
6.0.5版本已经去掉了完成页面的图片,不需要添加下面的配置
去除默认完成页面的图片
1 | [Code] |
注意
组件的高度不能设置为固定的值,在高分辨率的屏幕上会显示异常。