Inno Setup入门 (软件打包工具)学习笔记 (26课全)

article/2025/11/6 16:18:01

[] : 里面的就是 段 每个段里面的是属性

AppId : 软件的APPID尽量是唯一的,随机生成,尽量不跟其他软件的ID冲突,这个ID安装之后是要写进系统的注册表的,系统在管理和卸载你的软件的时候就是通过这个ID去操作的。若相同,则会覆盖安装。

用分号;进行注释

{autopf} : C盘中 Program Files的路径

Compression : 压缩方式

SolidCompression: 是否让所有文件一次性压缩

[任务段] : 存放了安装包中用户可以选择的选项

[文件段] : 包含要打进安装包中的所有文件

[运行段] : 用户安装完之后你要去执行的一些操作

[代码段] :

begin 相当于前花括号 {
end 相当于后花括号 }

:= 变量赋值

在这里插入图片描述

  1. 最简单的iss脚本
[setup]AppName=TestAppVerName=TEST;默认安装路径
DefaultDirName="C:\Users\ou\Desktop\新建文件夹 (3)\source"AppVersion=1.0[files]
;需要加进安装包的文件
Source: "C:\Users\ou\Desktop\新建文件夹 (3)\source\Elegoo 3D Print for test.exe"; DestDir: "{app}"
  1. 修改安装时的图片
[setup]AppName=TestAppVerName=TESTDefaultDirName="E:\TEST"AppVersion=1.0WizardImageFile=dh.bmp[files]Source: "F:\desktop\ipmsg.exe"; DestDir: "{app}"
  1. 指定压缩方式

Setup段中的compression指定了采用的压缩方式,较高的压缩率需要较多的时间或者需要更大的内存空间,可用的值如下:

zip

zip/1到zip/9

bzip

bzip/1 到bzip/9

lzma

lzma/fast

lzma/normal

lzma/max

lzma/ultra

lzma/ultra64

lzma2

lzma2/fast

lzma2/normal

lzma2/max

lzma2/ultra

lzma2/ultra64

none

其中lzma2/max是编译器使用的默认压缩方式,另外,lzma/ultra、lzma/ultra64、lzma2/ultra和lzma2/ultra64在使用前需要审查一下内存需求。Zip方式的压缩算法比较快,并且在压缩和解压的时候只需要很低的内存空间(不超过1M),但是压缩并不如其他的方式好,zip和lzma算法一样,有一个很特别的属性:对不可压缩文件(例如已经被压缩过的文件)直接跳过,默认的压缩级别是7(可用的是1-9)

Bzip是bzip2压缩器采用的方法,通常比zip方法压缩好,但是压缩速度比较慢,同时需要占用更大的内存空间,通常在压缩的时候是8M,解压的时候则是4M,默认的压缩级别是9(可用的是1-9)

Lzma则是7-Zip LZMA压缩器采用的方法,相比前面的zip和bzip压缩算法,效果明显好一些,但是也要占用较多的内存,速度也比较慢。

Lzma2是7-Zip LZMA2压缩器采用的方法,该算法是lzma的改进版,能对不可压缩文件提供更好的比率,并可对大文件实现多部分同步压缩。同样地,该算法也要消耗较大的内存。

None显然是不使用任何压缩方法。

可以根据自己的文件特性选择合适的压缩算法,个人认为就目前的情况而言,一般的打包使用默认的压缩算法即可。

  1. 为程序创建桌面快捷方式
[setup];全局设置,本段必须AppName=TestAppVerName=TESTDefaultDirName="E:\TEST"AppVersion=1.0[files]Source: "F:\desktop\ipmsg.exe"; DestDir: "{app}"[icons]Name: "{userdesktop}\飞鸽传书";Filename: "{app}\ipmsg.EXE"; WorkingDir: "{app}"

Name:要创建的快捷方式的名字和位置,上例中将会在当前用户的桌面创建一个名为“飞鸽传书”快捷图标,该选项是是必须的。

FileName:快捷方式的命令行文件名,即快捷方式指向的实际可执行文件,这里是ipmsg.exe文件,该项为必须的。

Parameters:快捷方式的可选命令行参数,如果编写的是一个命令行方式的可执行文件,额可以通过该选项传递参数,一般的可执行文件都不需要该选项。

WorkingDir:快捷方式的工作 (或启动) 目录,就是指示程序在哪个目录开始运行。

HotKey:快捷方式的热键 (或快捷键) 设置,就是可以用于启动程序的组合键

Comment:指定快捷方式的注释 (或描述) 对象,当鼠标移动到该快捷方式上的时候会有一个黄色的小窗口给出提示,一般是该程序的描述。

IconFileName:要显示的自定义图标文件名。这可以是一个包含图标文件的可执行映像即.exe或者.dll)也可以是一个.ico 文件,默认会采用原可执行文件的图标。

IconIndex:指定的文件中使用的以零为基点的图标索引,这是因为有些Icon可以存放在.dll文件中,例如操作系统中的shell32.dll文件,保存有100多个图标,如果IconFileName指定的是该文件(一般位于C:\WINDOWS\system32目录下),那么IconIndex就指定了使用哪个图标。

  1. 添加readme文件(可以是任何格式的)
[setup];全局设置,本段必须AppName=TestAppVerName=TESTDefaultDirName="E:\TEST"AppVersion=1.0[files]Source: "F:\desktop\test\ipmsg.exe"; DestDir: "{app}";Source: "F:\desktop\test\readme.txt"; DestDir: "{app}";Flags:isreadme
  1. 在程序目录下创建文件
[setup];全局设置,本段必须AppName=TestAppVerName=TESTDefaultDirName="E:\TEST"AppVersion=1.0[files]Source: "F:\desktop\test\ipmsg.exe"; DestDir: "{app}";Source: "F:\desktop\test\readme.txt"; DestDir: "{app}";Flags:isreadme[dirs]Name:"{app}\WorkDir"

安装好之后会在安装目录下创建一个新的文件夹WorkDir

  1. 提供安装语言选项
[setup];全局设置,本段必须AppName=TestAppVerName=TESTDefaultDirName="E:\TEST"AppVersion=1.0Compression=lzma2/maxShowLanguageDialog=no[languages]Name: "en"; MessagesFile: "compiler:Default.isl"[files]Source: "C:\Users\ou\Desktop\新建文件夹 (3)\source\Elegoo 3D Print for test.exe"; DestDir: "{app}";

上例中需要提到的是[setup]段中需要加入ShowLanguageDialog=yes,其实不加也是可以的,因为ShowLanguageDialog默认是yes。

安装过程中会根据用户的选择采用不同的语言界面:
在这里插入图片描述

  1. 有选择性的安装文件
DefaultDirName="E:\TEST"AppVersion=1.0Compression=lzma2/maxShowLanguageDialog=no[Components]Name: main; Description:"主程序(必选)";Types:full compact custom;Flags: fixedName: data; Description:"数据文件";Types:fullName: help;Description:"帮助文件";Types:full[files]Source: "C:\Users\ou\Desktop\新建文件夹 (3)\source\Elegoo 3D Print for test.exe"; DestDir: "{app}";Components:mainSource: "C:\Users\ou\Desktop\新建文件夹 (3)\source\ououtest.md"; DestDir: "{app}";Components:dataSource: "C:\Users\ou\Desktop\新建文件夹 (3)\source\123.xls"; DestDir: "{app}" ;Components:help

在这里插入图片描述
标志位设置为fixed,将确保主程序必定安装

  1. 修改安装过程中的文字显示
    在这里插入图片描述
[setup];全局设置,本段必须AppName=TestAppVerName=TESTDefaultDirName="E:\TEST"AppVersion=1.0Compression=lzma2/maxShowLanguageDialog=yes[files]Source: "C:\Users\ou\Desktop\新建文件夹 (3)\source\Elegoo 3D Print for test.exe"; DestDir: "{app}";[Messages]BeveledLabel=CastorButtonNext=继续吧(&F)>ButtonBack=返回吧(&B)<ButtonCancel=退出吧(&C)ButtonInstall=安装吧(&I)!ButtonFinish=搞定(&X)~~

在这里插入图片描述

  1. 操作注册表

有些程序需要随系统启动,或者需要建立某些文件关联等问题,这些都是通过在安装程序中对注册表进行操作的结果。Inno Setup中通过[registry]段实现对注册表的操作。

在这里插入图片描述

[setup];全局设置,本段必须AppName=TestAppVerName=TESTDefaultDirName="C:\Users\ou\Desktop\新建文件夹 (3)\新建文件夹"AppVersion=1.0Compression=lzma2/maxShowLanguageDialog=yes[files]Source: "C:\Users\ou\Desktop\新建文件夹 (3)\source\Elegoo 3D Print for test.exe"; DestDir: "{app}";[registry];本段处理程序在注册表中的键值Root:HKLM;Subkey:SOFTWARE\Microsoft\Windows\CurrentVersion\Run;ValueType: string; ValueName:TEST;ValueData:{app}\ipmsg.exe;Flags: uninsdeletevalue

由于使用的标志位是uninsdeletevalue,所以卸载软件将会自动删除该值,如果使用uninsdeletekey的话,该键下的其他值都会被删除,这不是一个很好的方法,除非你确定使用的是自己的专用键,否则不推荐使用。

  1. 完成安装后执行某些程序

测试下面代码生成的打包文件,运行到最后出现finish之前,将会等待run段下的程序(.exe文件)执行完毕后方可继续运行。

[setup];全局设置,本段必须AppName=TestAppVerName=TESTDefaultDirName="C:\Users\ou\Desktop\新建文件夹 (3)\新建文件夹"AppVersion=1.0Compression=lzma2/maxShowLanguageDialog=yes[files]Source: "C:\Users\ou\Desktop\新建文件夹 (3)\source\Elegoo 3D Print for test.exe"; DestDir: "{app}";[run]Filename: "C:\Users\ou\Desktop\新建文件夹 (3)\source\Elegoo 3D Print for test.exe";
  1. Pascal脚本(1)
[Code]

在安装程序初始化时调用,返回False 将中断安装,True则继续安装,测试代码如下:

function InitializeSetup(): Boolean;beginResult := MsgBox('安装程序正在初始化,你确定要安装吗?', mbConfirmation, MB_YESNO) = idYes;if Result = False thenMsgBox('你放弃了安装,程序直接退出', mbInformation, MB_OK);end;

该过程提供用户完成预安装和安装之后的任务,更多的是提供了安装过程中的状态。参数CurStep=ssInstall是在程序实际安装前(所有的路径等都配置好之后准备写入文件钱),CurStep=ssPostInstall是实际安装完成后,而CurStep=ssDone是在一次成功的安装完成后、安装程序终止前(即点击finish按钮后执行)。测试代码如下:

procedure CurStepChanged(CurStep: TSetupStep);beginif CurStep=ssinstall thenMsgBox('准备写入文件了', mbInformation, MB_OK);if CurStep=ssPostinstall thenMsgBox('文件复制完成', mbInformation, MB_OK);if CurStep=ssDone thenMsgBox('软件成功安装', mbInformation, MB_OK);end;

在这里插入图片描述

当用户单击下一步按钮时调用。如果返回True,向导将移到下一页;如果返回False,它仍保留在当前页。测试代码如下

function NextButtonClick(CurPageID: Integer): Boolean;beginResult := MsgBox('到下一页去吗?', mbConfirmation, MB_YESNO) = idYes;end;

在这里插入图片描述

  1. Pascal脚本(2)

自动显示密码页并调用CheckPassword检查密码。返回True 表示接受密码,返回False拒绝。测试代码如下:

function CheckPassword(Password: String): Boolean;
begin
if Password='castor' then
result:=true;
end;

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

function NeedRestart(): Boolean;
begin
result:=True;
end;

在Ready to Install页面变为活动页的时候自动调用该函数,该函数返回一段文本,该文本显示于Ready to Install页面中的设置备注中

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;

在这里插入图片描述

该函数将在用户信息向导页中自动出现一个序列号对象 (前提是[Setup]段中使用UserInfoPage=yes)

function CheckSerial(Serial: String): Boolean;
begin
if Serial='ABCDEF-1234567890' then
Result:=True;
end;

在这里插入图片描述

  1. 替换安装程序和卸载程序的图标

安装文件图标 Setup段

SetupIconFile=jiong.ico

安装和卸载图标不一样

[code]//插件函数用法//参数:句柄(插件错误对话框的父句柄), exe文件完整路径名称, (exe文件中要替换的)图标资源名称,图标文件的完整路径名称, (exe中要替换的图标资源所在)语系//返回值:成功 = Tr, 失败 = Falsefunction UpdateIcon(const hWnd: Integer; const exeFileName, exeIcon, IcoFileName: String; wlangID: DWORD): Boolean;external 'UpdateIcon@files:UpdateIcon.dll stdcall';//替换卸载程序的图标function UpdateUninstIcon(const IcoFileName: String): Boolean;begin//要替换图标的exe文件路径名称留空,则插件会自动替换掉Inno卸载程序的图标,其它参数类似!Result:= UpdateIcon(MainForm.Handle, '', '', IcoFileName, 0);//替换卸载图标end;procedure CurStepChanged(CurStep: TSetupStep);varsIcon: String;begin//注意:替换卸载程序的图标,必须是在卸载程序生成之前!//安装图标与卸载图标的格式与大小一致,否则可能会导致卸载程序出错!if CurStep=ssInstall thenbeginsIcon:= ExpandConstant('{tmp}\uninstall.ico'); //定义卸载图标ExtractTemporaryFile(ExtractFileName(sIcon)); //释放卸载图标//要替换图标的exe文件路径名称留空,则插件会自动替换掉Inno卸载程序的图标!UpdateUninstIcon(sIcon);//替换卸载图标end;end;
  1. Inno Setup类参考

下面的程序将会创建一个最简单的自定义页面,并显示在欢迎页面后面:

[setup];全局设置,本段必须AppName=TestAppVerName=TESTDefaultDirName="C:\Users\ou\Desktop\新建文件夹 (3)\新建文件夹"AppVersion=1.0Compression=lzma2/maxShowLanguageDialog=yesUserInfoPage=yes[files]Source: "C:\Users\ou\Desktop\新建文件夹 (3)\source\Elegoo 3D Print for test.exe"; DestDir: "{app}";[code]procedure InitializeWizard();beginCreateCustomPage(wpWelcome, '标题:自定义页面', '描述:这是我的自定义页面');end;
  1. Inno Setup类参考(2)

如何在自定义页面上添加按钮


[code]varmyPage:TwizardPage;myBtn:TButton;procedure InitializeWizard();beginmyPage:=CreateCustomPage(wpWelcome, '标题:自定义页面', '描述:这是我的自定义页面');myBtn:=TButton.Create(nil);myBtn.Parent:=myPage.Surface;end;
varmyPage:TwizardPage;myBtn:TButton;myFont:TFont;procedure ClickmyBtn(Sender: TObject);beginMsgBox('你点击了按钮~~', MBInformation, MB_OK);end;procedure InitializeWizard();beginmyPage:=CreateCustomPage(wpWelcome, '标题:自定义页面', '描述:这是我的自定义页面');myBtn:=TButton.Create(myPage);myBtn.Parent:=myPage.Surface;myBtn.Caption:='点我~';myBtn.Default:=True;myFont:=TFont.Create();myFont.Size:=16;myFont.Style:=[fsBold];myFont.Style:=myFont.Style+[fsItalic];(*或者使用myFont.Style:=[fsBold,fsItalic];*)myBtn.Font:=myFont;myBtn.Width:=300;myBtn.Height:=100;myBtn.OnClick:=@ClickmyBtn;end;
  1. Inno Setup类参考(3)

标签(Label)

[setup];全局设置,本段必须AppName=TestAppVerName=TESTDefaultDirName="C:\Users\ou\Desktop\新建文件夹 (3)\新建文件夹"AppVersion=1.0Compression=lzma2/maxShowLanguageDialog=yesUserInfoPage=yes[files]Source: "C:\Users\ou\Desktop\新建文件夹 (3)\source\Elegoo 3D Print for test.exe"; DestDir: "{app}";[code]varmyPage:TwizardPage;myBtn:TButton;myLbl:TLabel;procedure ClickmyBtn(Sender: TObject);beginmyLbl.Caption:='你点击了按钮~';myLbl.Color:=clRed;end;procedure InitializeWizard();beginmyPage:=CreateCustomPage(wpWelcome, '标题:自定义页面', '描述:这是我的自定义页面');myBtn:=TButton.Create(myPage);myBtn.Parent:=myPage.Surface;myBtn.Caption:='点我~';myBtn.OnClick:=@ClickmyBtn;myLbl:=TLabel.Create(myPage);myLbl.Parent:=myPage.Surface;myLbl.Top:=myBtn.Top+100;myLbl.Caption:='我是标签~';end;

双击和单击

[setup];全局设置,本段必须AppName=TestAppVerName=TESTDefaultDirName="C:\Users\ou\Desktop\新建文件夹 (3)\新建文件夹"AppVersion=1.0Compression=lzma2/maxShowLanguageDialog=yesUserInfoPage=yes[files]Source: "C:\Users\ou\Desktop\新建文件夹 (3)\source\Elegoo 3D Print for test.exe"; DestDir: "{app}";[code]varmyPage:TwizardPage;myBtn:TButton;myLbl:TLabel;procedure ClickmyBtn(Sender: TObject);beginmyLbl.Caption:='你点击了按钮~';myLbl.Color:=clRed;end;procedure ClickMyLbl(Sender: TObject);beginMsgBox('你单击了标签', MBInformation, MB_OK);end;procedure DbClickMyLbl(Sender: TObject);beginMsgBox('你双击了标签', MBInformation, MB_OK);end;procedure InitializeWizard();beginmyPage:=CreateCustomPage(wpWelcome, '标题:自定义页面', '描述:这是我的自定义页面');myBtn:=TButton.Create(myPage);myBtn.Parent:=myPage.Surface;myBtn.Caption:='点我~';//myBtn.OnClick:=@ClickmyBtn;myLbl:=TLabel.Create(myPage);myLbl.Parent:=myPage.Surface;myLbl.Top:=myBtn.Top+50;myLbl.Caption:='我是标签~';myLbl.OnDblClick:=@DbClickMyLbl;//myLbl.OnClick:=@ClickMyLbl;end;
  1. Inno Setup类参考(4)

文本框,是典型的窗口可视化组件,既可以用来输入文本,也可以用来显示文本

[code]varmyPage:TwizardPage;myBtn:TButton;ed1,ed2,ed3:TEdit;procedure ClickmyBtn(Sender: TObject);begined3.Text:=ed1.Text+' '+ed2.Text;end;procedure InitializeWizard();beginmyPage:=CreateCustomPage(wpWelcome, '标题:自定义页面', '描述:这是我的自定义页面');myBtn:=TButton.Create(myPage);myBtn.Parent:=myPage.Surface;myBtn.Caption:='点我~';myBtn.OnClick:=@ClickmyBtn;ed1:=TEdit.Create(myPage);ed1.Parent:=myPage.Surface;ed1.Top:=myBtn.Top+30;ed1.Width:=myBtn.Width;ed2:=TEdit.Create(myPage);ed2.Parent:=myPage.Surface;ed2.Top:=ed1.Top+30;ed2.Width:=myBtn.Width;ed3:=TEdit.Create(myPage);ed3.Parent:=myPage.Surface;ed3.Top:=ed2.Top+30;ed3.Width:=myBtn.Width;    end;
  1. Inno Setup类参考(5)

单选按钮

varmyPage:TwizardPage;radio1,radio2:TRadioButton;lbl:TLabel;font:TFont;{radio1的事件响应过程}procedure ClickRadio1(Sender: TObject);beginlbl.Font.Color:=clRed;end;{radio2的事件响应过程}procedure ClickRadio2(Sender: TObject);beginlbl.Font.Color:=clBlue;end;procedure InitializeWizard();beginmyPage:=CreateCustomPage(wpWelcome, '标题:自定义页面', '描述:这是我的自定义页面');lbl:=TLabel.Create(myPage);lbl.Parent:=myPage.Surface;lbl.Caption:='改变单选按钮的选项,我就会变色';radio1:=TRadioButton.Create(myPage);radio1.Parent:=myPage.Surface;radio1.Caption:='红色';radio1.Top:=lbl.Top+20;font:=TFont.Create();font.Color:=clRed;radio1.Font:=font;radio1.OnClick:=@ClickRadio1;radio2:=TRadioButton.Create(myPage);radio2.Parent:=myPage.Surface;radio2.Caption:='蓝色';radio2.Top:=radio1.Top+20;font.Color:=clBlue;radio2.Font:=font;radio2.OnClick:=@ClickRadio2;end;

存储框
在这里插入图片描述

varmyPage:TwizardPage;radio1,redio2:TRadioButton;mm:TMemo;
procedure InitializeWizard();beginmyPage:=CreateCustomPage(wpWelcome, '标题:自定义页面', '描述:这是我的自定义页面');mm:=TMemo.Create(myPage);mm.Parent:=myPage.Surface;mm.Text:='存储框测试';mm.Lines.Add('这是新的一行');mm.Lines.Insert(0,'我在最前面');mm.Lines.Add('请删除我,第四行');mm.Lines.Delete(3);{行号从0排起,插入到前面}mm.WordWrap:=True;{自动换行}mm.WantTabs:=True;{接受Tab键}mm.WantReturns:=True;{换行}mm.ScrollBars:=ssVertical;{滚动条}
end;
  1. Inno Setup类参考(7)

复选框(CheckBox)用于多个并不互斥的几个选项中作出一个或者多选择,例如字体可以有粗体、斜体和下划线,这三种状态可以任意组合,像这样的选项可以采用复选框实现。
在这里插入图片描述

[setup];全局设置,本段必须AppName=TestAppVerName=TESTDefaultDirName="C:\Users\ou\Desktop\新建文件夹 (3)\新建文件夹"AppVersion=1.0Compression=lzma2/maxShowLanguageDialog=yesUserInfoPage=yes[files]Source: "C:\Users\ou\Desktop\新建文件夹 (3)\source\Elegoo 3D Print for test.exe"; DestDir: "{app}";[code]
[code]varmyPage:TWizardPage;lbl:TLabel;chk1,chk2,chk3:TCheckBox;procedure ClickCHK1(Sender:TObject);beginif chk1.Checked thenlbl.Font.Style:=lbl.Font.Style+[fsBold]elselbl.Font.Style:=lbl.Font.Style-[fsBold];end;procedure ClickCHK2(Sender:TObject);beginif chk2.Checked thenlbl.Font.Style:=lbl.Font.Style+[fsItalic]elselbl.Font.Style:=lbl.Font.Style-[fsItalic];end;procedure ClickCHK3(Sender:TObject);beginif chk3.Checked thenlbl.Font.Style:=lbl.Font.Style+[fsUnderline]elselbl.Font.Style:=lbl.Font.Style-[fsUnderline];end;procedure InitializeWizard();beginmyPage:=CreateCustomPage(wpWelcome, '标题:自定义页面', '描述:这是我的自定义页面');lbl:=TLabel.Create(myPage);lbl.Parent:=myPage.Surface;lbl.Caption:='请选择复选框,并注意文字的变化';chk1:=TCheckBox.Create(myPage);chk1.Parent:=myPage.Surface;chk1.Caption:='粗体';chk1.top:=lbl.Top+20;chk1.OnClick:=@ClickCHK1;chk2:=TCheckBox.Create(myPage);chk2.Parent:=myPage.Surface;chk2.Caption:='斜体';chk2.top:=chk1.Top+20;chk2.OnClick:=@ClickCHK2;chk3:=TCheckBox.Create(myPage);chk3.Parent:=myPage.Surface;chk3.Caption:='下划线';chk3.top:=chk2.Top+20;chk3.OnClick:=@ClickCHK3;end;
  1. Inno Setup类参考(8)

列表框(ListBox)是Windows应用程序中重要的输入手段,其中包括多个选项用户可以从其中选择一个或者多个,程序根据用户的选择做出相应的处理,列表框在外观上和存储框类似,但是行为却有很大的不同,列表框中项一般是预先给定的,而存储框则可以让用户进行输入,并且列表框中的项被选择之后也会触发事件。

在这里插入图片描述

[setup];全局设置,本段必须AppName=TestAppVerName=TESTDefaultDirName="C:\Users\ou\Desktop\新建文件夹 (3)\新建文件夹"AppVersion=1.0Compression=lzma2/maxShowLanguageDialog=yesUserInfoPage=yes[files]Source: "C:\Users\ou\Desktop\新建文件夹 (3)\source\Elegoo 3D Print for test.exe"; DestDir: "{app}";[code]varmyPage:TWizardPage;list:TListBox;lbl:TLabel;procedure ClickListBox(Sender:TObject);beginlbl.Caption:='你选择的城市是:'+list.Items.Strings[list.ItemIndex]end;procedure InitializeWizard();beginmyPage:=CreateCustomPage(wpWelcome, '标题:自定义页面', '描述:这是我的自定义页面');list:=TListBox.Create(myPage);list.Parent:=myPage.Surface;list.Items.Add('北京');list.Items.Add('上海');list.Items.Add('香港');list.Items.Add('武汉');list.Items.Add('广州');list.OnClick:=@ClickListBox;lbl:=TLabel.Create(myPage);lbl.Parent:=myPage.Surface;lbl.Top:=list.Top+list.Height+10;end;
  1. 个性化 Inno Setup 协议页面

在这里插入图片描述

[setup];全局设置,本段必须AppName=TestAppVerName=TESTDefaultDirName="C:\Users\ou\Desktop\新建文件夹 (3)\新建文件夹"AppVersion=1.0Compression=lzma2/maxShowLanguageDialog=yes//自定义许可协议
LicenseFile=C:\Users\ou\Desktop\新建文件夹 (3)\source\新建文本文档.txt[files]Source: "C:\Users\ou\Desktop\新建文件夹 (3)\source\Elegoo 3D Print for test.exe"; DestDir: "{app}";[Messages]
SetupWindowTitle=我是顶部的名称[code]procedure InitializeWizard();
begin
WizardForm.LICENSEACCEPTEDRADIO.Checked := true;//默认选择接受协议
//不显示接受协议和不接受协议的radio空间
WizardForm.LICENSEACCEPTEDRADIO.Visible := false;
WizardForm.LicenseNotAcceptedRadio.Visible := false;
end;//在协议页面时更改【下一步】按钮显示的内容为【我接受】
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpLicense
then
WizardForm.NextButton.Caption := '我接受';
end;
  1. Inno Setup 安装前卸载原程序

[Code]
function InitializeSetup(): boolean;
varResultStr: String;ResultCode: Integer;
beginif RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\APP_NAME_is1', 'UninstallString', ResultStr) thenbeginResultStr := RemoveQuotes(ResultStr);Exec(ResultStr, '/silent', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);end;result := true;
end;
  1. 添加管理员权限
  2. 使用dll(1)
[setup];全局设置,本段必须AppName=TestAppVerName=TESTDefaultDirName="C:\Users\ou\Desktop\新建文件夹 (3)\新建文件夹"AppVersion=1.0Compression=lzma2/maxShowLanguageDialog=yesLicenseFile=C:\Users\ou\Desktop\新建文件夹 (3)\source\新建文本文档.txt[files]Source: "C:\Users\ou\Desktop\新建文件夹 (3)\source\Elegoo 3D Print for test.exe"; DestDir: "{app}";[Messages]
SetupWindowTitle=我是顶部的名称[code]var
myPage:TWizardPage;
Button :TNewButton;
Cnt:Integer;
function GetCurrentProcessId(): Integer;
external 'GetCurrentProcessId@C:\Windows\System32\kernel32.dll';procedure ButtonOnClick(Sender: TObject);
beginMsgBox(IntToStr(GetCurrentProcessId()), mbInformation, mb_Ok); end;procedure InitializeWizard();
begin
myPage:=CreateCustomPage(wpWelcome, '标题:自定义页面', '描述:这是我的自定义页面'); 
Button := TNewButton.Create(mypage);
Button.Width := ScaleX(75);
Button.Height := ScaleY(23);
Button.Caption := 'TNewButton';
Button.OnClick := @ButtonOnClick;
Button.Parent := mypage.Surface;
end;

http://chatgpt.dhexx.cn/article/c1vcxiOZ.shtml

相关文章

Inno Setup选择语言并写入配置文件、翻译提示信息

0.前言 制作一个支持多种语言的安装包&#xff0c;应当具备以下几种能力&#xff1a; 读取系统语言设置&#xff0c;并作为启动时的默认语言可选择安装的语言&#xff0c;随后显示对应语言的的安装提示语将选择的语言写入到配置文件&#xff0c;以供程序运行时进行判断 Inno…

inno setup 最简单的自定义界面效果

1、安装的第一个界面 2、安装进度条界面 3、完成界面 终于使用几个周末的时间做出来了一版本&#xff0c;内容有待完善&#xff0c;比如修复、更新等等的操作&#xff0c;但是如果只是单纯的安装来讲&#xff0c;已经可以使用

inno setup打包脚本总结

inno setup是比较简单好用的一款打包工具。 下面以打包HelloWorld.exe为例进行说明。 一、打包目录的建立 创建source目录&#xff1a;用于放置主程序、依赖dll、资源等待打包文件。创建output目录&#xff1a;用于存放生成的安装包。HelloWorld.iss&#xff1a;使用inno se…

inno setup 更改安装路径学习

因为安装的时候&#xff0c;常常需要修改安装文件路径&#xff0c;因此需要这个功能 VAR button_browse : HWND; 界面&#xff1a; //浏览按钮 button_browse : BtnCreate(WizardForm.Handle, 506, 420, 75, 24, ExpandConstant({tmp}\button_browse.png), 0, FALSE); …

Inno Setup 制作安装包问题总结

没有生成桌面快捷键 安装完成后&#xff0c;选择运行程序报错 可以参考以下文章Inno Setup 制作exe安装包_哭哭啼的博客-CSDN博客Inno Setup 制作exe安装包前言&#xff1a;使用Inno Setup制作exe安装包&#xff0c;首先需要一个可运行的exe程序&#xff0c;然后下载Inno Set…

【Inno Setup】安装包制作,项目打包方案

系列文章 MySQL安装教程&#xff08;详细&#xff09; 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/126037520 MySQL卸载教程&#xff08;详细&#xff09; 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/129279265 …

Inno setup 打包教程

简述&#xff1a; inno setup 是较常用且简单的软件打包工具。 1、安装并打开 inno setup 软件 ① 运行环境 系统&#xff1a;Windows 7 软件&#xff1a;inno setup 5.5.5 ② 安装 inno setup 5.5.5完成后&#xff0c;点击 “开始” → “所有程序” → “Inno Setup 5” → …

使用inno setup生成桌面安装程序最新教程,常用功能及详解。

目录 前言 一、下载inno setup 二、使用 1.依次点击file-New&#xff0c;然后点击下一步 2.设置应用程序信息&#xff08;安装包信息&#xff09; 3.应用程序文件夹 4.应用程序文件 5.然后依次点击下一步 6.设置安装语言 7.编译设置 8.继续点下一步 三、其他一些常用设置…

inno setup技巧篇

Inno setup 中级技巧 介绍提前预习技巧内容1.修改界面上的提示语2.自动指定上一次安装的路径3. 安装时控制安装的路径,但是显示上次安装的路径4.卸载完成后不残留文件5.安装时运行批处理文件6.安装包制作过程中怎么调试7.控制面板中安装包显示的名字8.脚本中使用其他插件(.dll)…

FAQ式问答系统

FAQ式问答系统 最终效果系统架构项目描述一、意图识别1.fasttext介绍fasttext模型结构 2.数据格式3.Code 二、检索模型1.预处理2.构建hnsw图3.Learning To Rank&#xff08;1&#xff09;BM25BM25简单介绍&#xff1a; &#xff08;2&#xff09;深度匹配model 三、总结 最终效…

快速搭建一个基于知识图谱的智能问答系统

点击上方&#xff0c;选择星标或置顶&#xff0c;不定期资源大放送&#xff01; 阅读大概需要15分钟 Follow小博主&#xff0c;每天更新前沿干货 作者&#xff1a;张墨一 知乎链接&#xff1a;https://zhuanlan.zhihu.com/p/58248608 本文仅作学术分享&#xff0c;若侵权&#…

自然语言处理之智能问答系统

目录 一、问答系统简介 二、搭建基于检索的问答系统 三、其他相似度计算 相关参考&#xff1a; 一、问答系统简介 问答系统通常分为任务型机器人、闲聊机器人和解决型机器人&#xff08;客服机器人&#xff09;&#xff0c;三者的设计分别针对不同的应用场景。A&#xff0…

智能问答产品与技术

封面上放上凯的图片是因为&#xff0c;火影里面的凯有几个特点&#xff1a; 1、无忍术、血继界限、主角光环、显赫背景&#xff0c;完全靠自己努力修炼体术成为上忍 2、代表一种平凡的人做不平凡的事情的精神 3、对后辈也极其关注&#xff0c;所谓木叶飞舞之处 &#xff0c;…

你知道该如何搭建 AI 智能问答系统吗?

作者 | 李秋键 责编 | 刘静 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 今天我们将利用分词处理以及搜索引擎搭建一个智能问答系统&#xff0c;具体的效果如下所示&#xff1a; 下面简单了解下智能问答系统和自然语言处理的概念&#xff0c;智能问答系统是自然…

NLP: 基于文本语义的智能问答系统

向AI转型的程序员都关注了这个号???????????? 人工智能大数据与深度学习 公众号&#xff1a;datayx 问答系统是自然语言处理领域一个很经典的问题&#xff0c;它用于回答人们以自然语言形式提出的问题&#xff0c;有着广泛的应用。 经典应用场景包括&#xff1a;智…

浅谈基于知识图谱构建智能问答系统

“人才引进落户政策”“企业法人变更登记”“如何办理公积金贷款”……在智慧政务业务中&#xff0c;智能客服能够7*24小时响应群众、企业关于日常事务办理、民生政策、企业经营法规等咨询&#xff0c;大力提升了信息获取的便利性。 智能问答系统涉及自然语言处理、语音技术、…

从0到1构建一个基于知识图谱的智能问答系统

目录 一、前言二、知识图谱2.1 数据入库2.1.1 Nebula Graph搭建2.1.2数据导入 三、后端3.1 搭建Flask框架&#xff0c;处理http请求3.2 处理请求(核心)3.2.1 实体提取和意图分类建立AC树实体提取建立意图特征库意图模板匹配 3.2.2 转换成ngql语句 3.3 连接nebula查询结果返回 一…

智能问答系统产品设计详解

问答系统的概述 我想大家肯定看过很多关于自然语言处理&#xff08;简称&#xff1a;NLP&#xff09;技术方面的书籍或者论文&#xff0c;但在这里我不会详细叙述NLP技术方面的知识&#xff0c;而是想通过产品化思路结合NLP相关技术来搭建一个基础版的问答系统。本文通过基于问…

基于Bert的知识库智能问答系统

项目完整地址&#xff1a;https://github.com/1105425455/Bert/tree/master 有训练好的模型 可以先看一下Bert的介绍。 Bert简单介绍 一.系统流程介绍。 知识库是指存储大量有组织、有结构的知识和信息的仓库。这些知识和信息被存储为实体和实体关系的形式&#xff0c;通常用于…

智能问答系统实践——答案选择

问题描述 这个问题来自于SemEval-2015Task3: Answer Selection in Community Question Answering. 简单的说就是从一堆问题和答案中找出他们之间的相关性。 这个Task包含两个Subtasks: 1.给定一个问题和一些答案,将答案进行为3类:good/potential/bad。 2.给定一个判定问题…