概述
- 大家可能平时深有体会,电脑隔一段时间就会被安装几个流氓软件。但我们明明没有手动去安装,这些是什么时候偷偷安装上去的。主要还是由于,我们安装某些软件时,它会捆绑安装一些软件,还有就是,点击一些钓鱼网站,会自动下载安装一些软件。但这些软件的共同点都是没有安装界面,也就是实现了静默安装。所以安装时你根本不会察觉到。
- 本文章就以打包工具inno setup为例,介绍下如何制作一个不带安装界面的静默安装包。
- 当然不是鼓励大家去做这种流氓软件。在实际工作中,确实有用户是有这种静默安装需求的。
Inno setup介绍
- 基本介绍:Inno setup打包软件入门
- 事件函数
- function ShouldSkipPage(PageID: Integer): Boolean;
- 调用这个事件函数确定是否在所有页面或不在一个特殊页面(用 PageID 指定)显示。如果返回 True,将跳过该页面;如果你返回 False,该页面被显示。
- 只有调用这个函数并且返回一个true,静默安装的时候才会自动安装结束,否则会停在某个安装过程中无法继续。
- procedure InitializeWizard();
- 在启动时使用该事件函数来改变向导或向导页面。也就是向导窗体生成前会调用这个函数,我们可以在这个函数中隐藏向导窗体边框。
- procedure CurPageChanged(CurPageID: Integer);
- 在新向导页面(用 CurPageID 指定)显示后调用。可以在这个函数中设置窗体大小为0,安装界面就不显示了。
- function ShouldSkipPage(PageID: Integer): Boolean;
打包脚本
-
#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"