使用inno setup制作静默安装包
最新推荐文章于 2025-07-24 09:09:51 发布
原创
最新推荐文章于 2025-07-24 09:09:51 发布
·
5k 阅读
·
2
·
11
·
CC 4.0 BY-SA版权
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
文章标签:
#windows
软件打包
专栏收录该内容
12 篇文章
订阅专栏
文章介绍了Innosetup这一打包工具如何被用来创建不带安装界面的静默安装包,特别提到了通过调用特定的事件函数如ShouldSkipPage和InitializeWizard来实现安装过程的自动化和界面隐藏。同时,文中也强调了这不是鼓励制作流氓软件,而是满足特定用户的静默安装需求。
概述
大家可能平时深有体会,电脑隔一段时间就会被安装几个流氓软件。但我们明明没有手动去安装,这些是什么时候偷偷安装上去的。主要还是由于,我们安装某些软件时,它会捆绑安装一些软件,还有就是,点击一些钓鱼网站,会自动下载安装一些软件。但这些软件的共同点都是没有安装界面,也就是实现了静默安装。所以安装时你根本不会察觉到。本文章就以打包工具inno setup为例,介绍下如何制作一个不带安装界面的静默安装包。当然不是鼓励大家去做这种流氓软件。在实际工作中,确实有用户是有这种静默安装需求的。
Inno setup介绍
基本介绍:Inno setup打包软件入门事件函数
function ShouldSkipPage(PageID: Integer): Boolean;
调用这个事件函数确定是否在所有页面或不在一个特殊页面(用 PageID 指定)显示。如果返回 True,将跳过该页面;如果你返回 False,该页面被显示。只有调用这个函数并且返回一个true,静默安装的时候才会自动安装结束,否则会停在某个安装过程中无法继续。 procedure InitializeWizard();
在启动时使用该事件函数来改变向导或向导页面。也就是向导窗体生成前会调用这个函数,我们可以在这个函数中隐藏向导窗体边框。 procedure CurPageChanged(CurPageID: Integer);
在新向导页面(用 CurPageID 指定)显示后调用。可以在这个函数中设置窗体大小为0,安装界面就不显示了。
打包脚本
#define MyAppName "静默安装测试包"
[setup]
; 安装应用程序的标题
AppName="静默安装测试包"
; 安装应用程序版本号
AppVersion = "v1.0"
; 默认安装目录
DefaultDirName={pf}
; 安装程序将不显示选择目标位置向导页面
DisableDirPage=yes
; 控制面板中显示
CreateUninstallRegKey=yes
; 编译输出文件夹
OutputDir=F:\study\inno setup\InnoSetup\output
; 编译后的安装包文件名
OutputBaseFilename="csDemo"
;卸载程序路径
UninstallFilesDir={app}\csDemo
; 不显示开始菜单文档向导页面
DisableProgramGroupPage=yes
; 安装程序将不显示"欢迎"向导页面。
DisableWelcomePage=yes
; 默认包含卸载程序在安装程序中
Uninstallable=yes
[Icons]
;创建卸载程序
Name: "{group}\卸载"; Filename: "{app}\csDemo\unins000.exe"
[Files]
Source: "F:\study\inno setup\InnoSetup\input\csDemo\*"; DestDir: "{app}\csDemo"
[code]
procedure CurPageChanged(CurPageID: Integer);
var ResultCode: Integer;
Version: TWindowsVersion;
begin
//安装过程界面无法隐藏,所以设置窗口高度和宽度为0
WizardForm.ClientWidth := ScaleX(0)
WizardForm.ClientHeight := ScaleY(0)
if CurPageID = wpWelcome then
WizardForm.NextButton.OnClick(WizardForm);
if CurPageID >= wpInstalling then
WizardForm.Visible := False
else
WizardForm.Visible := True;
end;
function ShouldSkipPage(PageID: Integer): Boolean;
begin
result := true;
end;
procedure InitializeWizard();
begin
//边界隐藏
WizardForm.BorderStyle := bsNone;
end;
[UninstallRun]
; 卸载前杀掉进程
Filename: taskkill;Parameters:"/t /f /im testApp.exe";Flags: runhidden
[UninstallDelete]
; 卸载后删除安装目录下所有文件
Type: filesandordirs; Name: "{app}\csDemo"