• C/S软件打包部署神器InnoSetup


    概述

    我们都知道做客户端软件,一般交付给客户的都是exe的安装包。那么我们平常开发完成之后,如何把程序进行打包呢。找了下发现Inno Setup是个不错的选择。

    InnoSetup 是一个免费的 Windows 安装程序制作软件。第一次发表是在 1997 年,Inno Setup 今天在功能设置和稳定性上的竞争力可能已经超过一些商业的安装程序制作软件。

    能做什么

     1.支持现在所有正在使用的 Windows 版本: 7, 2008 R2, Vista, XP, 2008,2003, 2000, Me, 98, 95, 和 NT 4.0 (不需要服务包)。

     2.广泛支持在 64 位 的 Windows XP and Windows Server2003 版本的操作系统中的 64 位应用程序安装。支持 x64 和 Itanium 两个结构。(在 Itanium 结构中,必须在 64 位模式安装 Service Pack 1。)

      3.支持创建单个EXE 格式的安装程序,使你的程序可以很方便地在网络上发表。同时也支持磁盘延伸。

      4.标准的Windows 2000/XP 样式向导界面。

      5.定制安装类型,例如:完整安装,最小安装,自定义安装。

      6.完整的卸载功能。

      7.文件安装:

        包括完全的“压缩”支持,bzip2 和 7-Zip LZMA 文件压缩。安装程序可以比较文件版本信息,替换正在使用的文件,使用共享文件计数,注册DLL/OCX 和类型库,以及安装字体。

      8.可以在任意地方创建快捷方式,包括开始菜单和桌面。

      9.创建注册表 和.INI 条目。

      10.在安装之前、之中或之后可运行其他程序。

      11.支持多语言安装。

      12.支持密码和加密安装。

      13.支持数字签名 、安装和卸载。

      14.后台安装和后台卸载。

      15.Unicode安装。(Windows 2000/XP 或更高)

      16.完整的Pascal 脚本 引擎选项于运行期高级自定义安装和卸载。

      17.全部源代码公开(Borland Delphi 2.0-5.0 和 2009)。

    创建安装程序的方式:脚本

     安装程序用编译脚本的方式创建,脚本其实就是一个类似.INI 文件格式的 ASCII 码文本文件。(它不象你想象的那么复杂!)。Unicode Inno Setup支持 UTF-8 编码文本文件。

        脚本用一个“.iss”(表示 Inno Setup Script脚本) 的扩展名。脚本控制着安装程序的所有方面。由它指定哪些文件将被安装到什么地方,在哪里创建快捷方式,且被命名为什么。

        脚本文件一般可以用安装程序编译器程序内置的编辑器进行编辑。在你编写完脚本后,下一个最终步骤就是选择安装程序编译器中的“编译”。创建完成后,就可以运行根据你脚本编译的安装程序了。按默认,这个安装程序创建在包含脚本文件目录下的名为“输出”目录中。

    如果你想看看它是怎样工作的,启动安装程序编译器,单击“文件 | 打开”,并选择位于 Inno Setup 安装目录下的Examples 子目录中的一个脚本文件。(你也可以将这些示例脚本作为你自己编写脚本的模板。)

    以下是我之前的项目的脚本

    ; Script generated by the Inno Setup Script Wizard.
    ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
    
    #define MyAppName "主机助手"
    #define MyAppVersion "1.1.1.7"
    #define MyAppPublisher "点击网络, 技术部."
    #define MyAppURL "http://yroot.bidns.net/"
    #define MyAppExeName "主机助手.exe"
    
    [Setup]
    ; NOTE: The value of AppId uniquely identifies this application.
    ; Do not use the same AppId value in installers for other applications.
    ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
    AppId={{CD9818E0-FEE2-418E-9775-15F50AE2229E}
    AppName={#MyAppName}
    AppVersion={#MyAppVersion}
    ;AppVerName={#MyAppName} {#MyAppVersion}
    AppPublisher={#MyAppPublisher}
    AppPublisherURL={#MyAppURL}
    AppSupportURL={#MyAppURL}
    AppUpdatesURL={#MyAppURL}
    DefaultDirName={pf}hugAssistant
    DisableProgramGroupPage=yes
    OutputDir=C:UsersadminDesktop
    OutputBaseFilename=主机助手安装包
    SetupIconFile=C:UsersadminDocumentsVisual Studio 2010Projectsyroot-10-24yrootinDebugimages	itle.ico
    Compression=lzma
    SolidCompression=yes
    
    [Languages]
    Name: "english"; MessagesFile: "compiler:Default.isl"
    
    [Tasks]
    Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: exclusive
    Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked  
    
    [Files]
    Source: "D:Debug主机助手.exe"; DestDir: "{app}"; Flags: ignoreversion
    Source: "D:DebugAccessSetup.exe"; DestDir: "{app}"; Flags: ignoreversion
    Source: "D:Debugconf*"; DestDir: "{app}conf"; Flags: ignoreversion recursesubdirs createallsubdirs
    Source: "D:Debugdata*"; DestDir: "{app}data"; Flags: ignoreversion recursesubdirs createallsubdirs
    Source: "D:Debugimages*"; DestDir: "{app}images"; Flags: ignoreversion recursesubdirs createallsubdirs
    Source: "D:Debug	ools*"; DestDir: "{app}	ools"; Flags: ignoreversion recursesubdirs createallsubdirs
    Source: "D:DebugCSkin.dll"; DestDir: "{app}"; Flags: ignoreversion
    Source: "D:DebugDiskQuotaTypeLibrary.dll"; DestDir: "{app}"; Flags: ignoreversion
    Source: "D:DebugDMSkin.dll"; DestDir: "{app}"; Flags: ignoreversion
    Source: "D:Debugform_data_path.txt"; DestDir: "{app}"; Flags: ignoreversion
    Source: "D:DebugInterop.ADODB.dll"; DestDir: "{app}"; Flags: ignoreversion
    Source: "D:DebugInterop.ADOX.dll"; DestDir: "{app}"; Flags: ignoreversion
    Source: "D:DebugInterop.FsrmLib.dll"; DestDir: "{app}"; Flags: ignoreversion
    Source: "D:DebugInterop.IISOle.dll"; DestDir: "{app}"; Flags: ignoreversion
    Source: "D:DebugInterop.TaskScheduler.dll"; DestDir: "{app}"; Flags: ignoreversion
    Source: "D:DebugMetroFramework.Design.dll"; DestDir: "{app}"; Flags: ignoreversion
    Source: "D:DebugMetroFramework.dll"; DestDir: "{app}"; Flags: ignoreversion
    Source: "D:DebugMetroFramework.Fonts.dll"; DestDir: "{app}"; Flags: ignoreversion
    Source: "D:DebugMicrosoft.Web.Administration.dll"; DestDir: "{app}"; Flags: ignoreversion
    Source: "D:DebugMicrosoft.Win32.TaskScheduler.dll"; DestDir: "{app}"; Flags: ignoreversion
    Source: "D:DebugMySql.Data.dll"; DestDir: "{app}"; Flags: ignoreversion
    Source: "D:DebugSimpleUpdater.dll"; DestDir: "{app}"; Flags: ignoreversion
    Source: "D:Debugyroot.vshost.exe"; DestDir: "{app}"; Flags: ignoreversion
    Source: "D:Debugyroot.vshost.exe.config"; DestDir: "{app}"; Flags: ignoreversion
    Source: "D:Debugyroot.vshost.exe.manifest"; DestDir: "{app}"; Flags: ignoreversion
    Source: "D:Debugyroot_beta.vshost.exe"; DestDir: "{app}"; Flags: ignoreversion
    Source: "D:Debugyroot_beta.vshost.exe.config"; DestDir: "{app}"; Flags: ignoreversion
    Source: "D:Debugyroot_beta.vshost.exe.manifest"; DestDir: "{app}"; Flags: ignoreversion
    Source: "D:Debug主机助手.exe"; DestDir: "{app}"; Flags: ignoreversion
    Source: "D:Debug主机助手.exe.config"; DestDir: "{app}"; Flags: ignoreversion
    Source: "D:Debug主机助手.pdb"; DestDir: "{app}"; Flags: ignoreversion
    ; NOTE: Don't use "Flags: ignoreversion" on any shared system files
    
    [Icons]
    Name: "{commonprograms}{#MyAppName}"; Filename: "{app}{#MyAppExeName}"
    Name: "{commondesktop}{#MyAppName}"; Filename: "{app}{#MyAppExeName}"; Tasks: desktopicon
    Name: "{group}{cm:UninstallProgram,主机助手}"; Filename: "{uninstallexe}"  
    
    ;[Components]  
    ;Name: Access; Description: "Access支持" ; Types: Full  
    
    [Messages]   
    ;卸载对话框说明  
    ConfirmUninstall=您真的想要从电脑中卸载主机助手吗?%n%n按 [是] 将会删除 %1 以及它的组件;%n按 [否] 则让软件继续留在您的电脑上.  
    
    [Run]
    Filename: "{app}{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
    
    [Registry]  
    Root: HKLM ;SubKey:"SoftwarehugAssistant";ValueType:dword;ValueName:config;ValueData:10 ;Flags: uninsdeletekey
    
    [code]
    //init setup
    function InitializeSetup(): boolean;  
    //var
    var Istoken: boolean; //avoid setup again   
    begin       
    Istoken := true;        
    if RegValueExists(HKEY_LOCAL_MACHINE, 'SOFTWAREhugAssistant', 'config') then  
    begin  
        MsgBox('程序已安装,请卸载后再尝试安装!',mbConfirmation, MB_OK);  
        Istoken := false;  
    end else  
    begin  
         Istoken := true;  
    end;  
    Result := Istoken;  
    end;
    
    //next button
    function NextButtonClick(CurPageID: Integer): Boolean;  
    //var
    var ResultCode: Integer;  
    var IsSetup : Boolean;  
    begin  
    IsSetup := true ;  
    case CurPageID of  
        wpReady:  
          begin  
           if not RegValueExists(HKEY_LOCAL_MACHINE, 'SOFTWAREClassesCLSID{6F3DD387-5AF2-492B-BDE2-30FF2F451241}InprocServer3212.0.0.0', 'RuntimeVersion') then   begin  
              if MsgBox('程序执行需要Access数据库的支持,是否现在安装?', mbConfirmation, MB_YESNO) = idYes then begin  
               ExtractTemporaryFile('AccessSetup.exe');    ExtractTemporaryFile('DMSkin.dll');
                if not Exec(ExpandConstant('{tmp}AccessSetup.exe'), '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode) then  
                  MsgBox('Access安装出错:' #13#13 ' ' + SysErrorMessage(ResultCode) + '.', mbError, MB_OK);  
              end else begin  
                    IsSetup := false ;  
              end ;  
              BringToFrontAndRestore();  
            end;  
          end;  
    end;  
    Result := IsSetup;  
    end;
      

  • 相关阅读:
    6.BLE---数据传输
    5.BLE---报文
    4.BLE---广播信道防冲突与数据信道选择
    3.BLE---信道与功率
    Ubuntu 安装exe 软件
    Zephyr ubuntu 环境搭建
    ES6语法(一)let 和 const 命令
    Vue(二十三)vuex + axios + 缓存 运用 (以登陆功能为例)
    Vue(二十二)vuex小案例(官网计数案例整合)
    Vue(二十一)使用express模拟接口数据
  • 原文地址:https://www.cnblogs.com/lyl6796910/p/14499133.html
Copyright © 2020-2023  润新知