• Inno Setup打包教程


    简述

    Inno Setup 是一个免费的 Windows 安装程序制作软件。第一次发表是在 1997 年,现在已经更新到Inno Setup 5了。Inno Setup是一个十分简单实用的打包小工具,可以按照我们自己的意愿设置功能,稳定性也十分好。

    官方网址:http://www.jrsoftware.org/


    安装教程

    一、下载安装

    官方下载地址:http://www.jrsoftware.org/isdl.php

    下载后直接安装即可

    二、修改安装包的管理员权限

    Inno Setup打包的程序在安装时,安装步骤最后一步若选中运行程序,会跳出一个错误提示框。不能执行文件,请求的操作需要提升。这是因为系统运行程序时需要管理员权限,而打包的文件并没有这个权限就试图直接运行。解决方法需要给Inno Setup添加管理员权限。

    1. 找到Inno Setup的安装路径,如E:Inno Setup 5,在里面找到SetupLdr.e32文件。

    2.下载一个eXeScope.exe,直接把SetupLdr.e32文件拖入程序中打开,eXeScope.exe可以百度直接搜索下载,或者在这里可以下载https://download.csdn.net/download/sakuya__/11107284

    选择XPMainifest下1目录,修改level的值并把相应的ASCII码修改:

    修改完后,记得保存。这样修改完后,Inno Setup打包的软件安装后的图标上右下就会有一个小盾牌的图标,表示已经获得管理员权限。

     


    打包教程

    (1)打开Inno setup 5软件,点击文件—>新建:

    (2)点击下一步

    (3)第一行填程序的名称,第二行为程序的版本,第三、四行的应用程序发布者和网站可以不填,填写完后选择下一步

    (4)这里基本不用更改,点击下一步

     (5)这里上面要选择程序的主执行文件,也就是你编译生成的exe文件,下面选择添加文件夹,把所有你的程序运行需要的dll和资源以及配置文件放在一个文件夹里,选择这个文件夹。然后下一步

    (6)这里需要哪些功能,在前边打上对勾即可,点击下一步

    (7)这里可以选择许可文件,安装前的文件(如Readme文件等),安装后显示信息等,点击下一步

    (8) 此处选择安装语言

    (9)在这里选择编译后安装包的输出文件夹,输出文件名等,还可以加载自定义的安装程序图标,填写完成后,点击下一步

     (10)在这里选择是否使用define编译指令,选择是也就是在生成的脚本里使用#define宏定义一些常量,方便脚本编写,不勾选就是不用,看个人。选择后点击下一步,完后完成。

    (11) 点击完成后会询问你是否立即编译新的脚本,这个脚本是根据刚才我们前面填写的那些内容自动生成的。可以直接使用编译,也可以自己重新编写,下面我会贴上我自己的写的一个把每行意思注释上,当做参考


    脚本代码

    #define MyAppName "test"
    #define MyAppVersion "1.0"
    #define MyAppPublisher "sakuya"
    #define MyAppExeName "test.exe"
     
    [Setup]
    ; 注: AppId的值为单独标识该应用程序。
    ; 不要为其他安装程序使用相同的AppId值。
    ; (生成新的GUID,点击 工具|在IDE中生成GUID。)
    AppId={{241FCDA1-8869-439C-9C7F-BF0061ADE5BC}
    ;应用程序名称
    AppName={#MyAppName}
    ;应用程序版本号
    AppVersion={#MyAppVersion}
    ;AppVerName={#MyAppName} {#MyAppVersion}
    AppPublisher={#MyAppPublisher}
    ;默认安装文件夹名
    DefaultDirName={pf}{#MyAppName}
    DefaultGroupName={#MyAppName}
    ;输出的exe的地址
    OutputDir=C:UsersLenovoDesktop
    OutputBaseFilename=test
    ;exe的图标的路径
    SetupIconFile=C:UsersLenovoDesktopheart.ico
    ;使用压缩类算法lzma
    Compression=lzma
    ;固定压缩格式
    SolidCompression=yes
    ;不需要管理权限也能安装
    PrivilegesRequired=none
    [Languages]
    ;中文语言
    Name: "chinesesimp"; MessagesFile: "compiler:Default.isl"
    [Tasks]
    ;Tasks: desktopicon 任务:生成快捷方式
    Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 0,6.1
    [Files]
    ;生成的快捷方式所指的原执行文件
    Source: "C:UsersLenovoDesktop	est	est.exe"; DestDir: "{app}"; Flags: ignoreversion
    ;打包的目录
    Source: "C:UsersLenovoDesktop	est*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
    ; 注意: 不要在任何共享系统文件上使用“Flags: ignoreversion”
    [Icons]
    ;生成开始菜单可执行程序map.exe是你目录下的可执行文件 WorkingDir: {app}” WorkingDir后面加{app} app的意思是随安装目录生成
    Name: "{group}{#MyAppName}"; Filename: "{app}{#MyAppExeName}"
    ;生成开始菜单卸载
    Name: "{group}{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}";WorkingDir:"{app}"
    ;Tasks: desktopicon 上面任务中的,生成快捷方式
    Name: "{commondesktop}{#MyAppName}"; Filename: "{app}{#MyAppExeName}"; Tasks: desktopicon
    [Run]
    Filename: "{app}{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
    [Code]
    var
    ErrorCode: Integer;
    IsRunning: Integer;
    //判定程序已经被安装过而不需要重复安装,判断当前安装路径下已经有要安装的exe
    // 安装时判断客户端是否正在运行 
    function InitializeSetup(): Boolean;
    begin 
      Result :=true; //安装程序继续
      if FileExists(ExpandConstant('{pf}	est	est.exe')) then
      begin
        MsgBox('程序已经安装在你的系统中了!', mbInformation, MB_OK );
        Result := false;
      end; 
      IsRunning:=FindWindowByWindowName('test'); 
      while IsRunning<>0 do 
      begin 
        if Msgbox('安装程序检测到客户端正在运行。' #13#13 '您必须先关闭它然后单击“是”继续安装,或按“否”退出!', mbConfirmation, MB_YESNO) = idNO then 
        begin 
          Result :=false; //安装程序退出 
          IsRunning :=0; 
        end else begin 
          Result :=true; //安装程序继续 
          IsRunning:=FindWindowByWindowName('test'); 
        end; 
      end; 
    end; 
    // 卸载时判断客户端是否正在运行 
    function InitializeUninstall(): Boolean; 
    begin 
      Result :=true; //安装程序继续 
      IsRunning:=FindWindowByWindowName('test'); 
      while IsRunning<>0 do 
      begin 
        if Msgbox('安装程序检测到客户端正在运行。' #13#13 '您必须先关闭它然后单击“是”继续安装,或按“否”退出!', mbConfirmation, MB_YESNO) = idNO then 
        begin 
          Result :=false; //安装程序退出 
          IsRunning :=0; 
        end else begin 
          Result :=true; //安装程序继续 
          IsRunning:=FindWindowByWindowName('test'); 
        end; 
      end; 
    end; 
    procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); 
    begin 
      case CurUninstallStep of 
      usUninstall: 
      begin // 开始卸载 
        end; 
        usPostUninstall: 
        begin // 卸载完成 
          //MsgBox('CurUninstallStepChanged:' #13#13 'Uninstall just finished.', mbInformation, MB_OK); 
          //插入代码执行卸载后的任务
          //ShellExec('open', 'http://www.baidu.com', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode); 
        end; 
      end; 
    end; 

     


    脚本代码

  • 相关阅读:
    判断是否声明了某个特性
    如何月份英文缩写字符串转日期
    要捕捉System.Exception异常吗
    jenkins发布到nuget
    C# – Record, Class, Struct
    Google Maps Embed API & JavaScript API
    图片综合知识
    ASP.NET Core – ADO.NET
    CSS – 管理
    JavaScript Library – PhotoSwipe
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/13540458.html
Copyright © 2020-2023  润新知