概述

  • 大家可能平时深有体会,电脑隔一段时间就会被安装几个流氓软件。但我们明明没有手动去安装,这些是什么时候偷偷安装上去的。主要还是由于,我们安装某些软件时,它会捆绑安装一些软件,还有就是,点击一些钓鱼网站,会自动下载安装一些软件。但这些软件的共同点都是没有安装界面,也就是实现了静默安装。所以安装时你根本不会察觉到。
  • 本文章就以打包工具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"