使用inno setup制作静默安装包

概述

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

猜你喜欢

转载自blog.csdn.net/new9232/article/details/129894156