如何利用Inno Setup一键部署软件安装包

1. 简介

Inno Setup是一款功能强大、免费的安装程序制作工具,广泛用于创建Windows应用程序的专业安装包。本文将以"CUMT校园网自动登录工具"为例,详细介绍如何使用Inno Setup创建一个功能完善的安装程序。

2. Inno Setup脚本概述

Inno Setup使用脚本语言来定义安装程序的行为。以下是一个基本的脚本结构:

; 定义应用程序信息
#define MyAppName "CUMT校园网自动登录工具"
#define MyAppVersion "1.0.2"
#define MyAppPublisher "MuQYY"
#define MyAppExeName "auto_login_app.exe"

[Setup]
; 安装程序的基本设置

[Languages]
; 定义安装程序支持的语言

[Tasks]
; 定义安装过程中的可选任务

[Files]
; 指定要安装的文件

[Icons]
; 创建快捷方式

[Run]
; 安装后运行的命令

3. 主要部分详解

3.1 [Setup]部分

这部分定义了安装程序的基本属性,如应用名称、版本、发布者等。

[Setup]
AppId={1234567A-89BC-DEF0-1234-567890ABCDEF}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppPublisher={#MyAppPublisher}
DefaultDirName={autopf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
OutputDir=D:\Installers
OutputBaseFilename=CUMTAutoLoginSetup_{#MyAppVersion}
Compression=lzma
SolidCompression=yes
WizardStyle=modern

注意事项:

  • AppId 应该使用唯一的GUID
  • OutputDir 指定安装程序输出目录
  • CompressionSolidCompression 用于优化安装包大小

3.2 [Languages]部分

指定安装程序支持的语言。

[Languages]
Name: "chinesesimplified"; MessagesFile: "compiler:Languages\ChineseSimplified.isl"

这里我们选择了简体中文作为安装程序的语言。

3.3 [Tasks]部分

定义安装过程中的可选任务。

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

这里添加了创建桌面图标的可选任务。

3.4 [Files]部分

定义需要安装的文件。

[Files]
Source: "D:\Output\auto_login_app\auto_login_app.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Output\auto_login_app\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

这部分指定了要复制到安装目录的文件和文件夹。

3.5 [Icons]部分

创建开始菜单和桌面快捷方式。

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

3.6 [Run]部分

定义安装完成后的操作。

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent

这里添加了安装完成后启动应用程序的选项。

4. 高级功能:检测并卸载旧版本

使用[Code]部分可以添加自定义Pascal脚本,实现更复杂的功能,如检测并卸载旧版本。

[Code]
function GetUninstallString(): string;
var
  sUnInstPath: string;
  sUnInstallString: String;
begin
  Result := '';
  sUnInstPath := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\{#emit SetupSetting("AppId")}_is1');
  if not RegQueryStringValue(HKLM, sUnInstPath, 'UninstallString', sUnInstallString) then
    RegQueryStringValue(HKCU, sUnInstPath, 'UninstallString', sUnInstallString);
  Result := sUnInstallString;
end;

function IsUpgrade(): Boolean;
begin
  Result := (GetUninstallString() <> '');
end;

function InitializeSetup(): Boolean;
var
  V: Integer;
  iResultCode: Integer;
  sUnInstallString: string;
begin
  Result := True;
  if IsUpgrade() then
  begin
    V := MsgBox(ExpandConstant('检测到旧版本,是否卸载?'), mbInformation, MB_YESNO or MB_DEFBUTTON1)
    if V = IDYES then
    begin
      sUnInstallString := GetUninstallString();
      sUnInstallString :=  RemoveQuotes(sUnInstallString);
      Exec(ExpandConstant(sUnInstallString), '/SILENT /NORESTART /SUPPRESSMSGBOXES','', SW_HIDE, ewWaitUntilTerminated, iResultCode);
      Result := True;
    end
    else
      Result := False;
  end;
end;

这段代码的主要功能是:

  1. 检测是否存在旧版本
  2. 如果存在,询问用户是否卸载
  3. 如果用户同意,则静默卸载旧版本

5. 编译和测试

  1. 打开Inno Setup Compiler
  2. 将上述所有代码复制到一个新的脚本文件中
  3. 点击"编译"按钮生成安装程序
  4. 运行生成的安装程序进行测试

6. 注意事项

  1. 始终为您的应用程序使用唯一的AppId
  2. 正确处理文件权限和UAC提升
  3. 提供清晰的安装向导和卸载选项
  4. 考虑添加许可协议和自定义页面
  5. 定期测试安装程序,确保在不同Windows版本上的兼容性

7. 总结

Inno Setup是一个强大而灵活的工具,可以帮助开发者创建专业的安装程序。通过本文的示例,您应该能够为自己的应用程序创建一个功能完善的安装包,包括检测和卸载旧版本、创建快捷方式、支持多语言等高级功能。

随着经验的积累,您可以进一步探索Inno Setup的更多高级特性,如自定义安装页面、添加注册表项、创建服务等,以满足更复杂的安装需求。

希望本文对您利用Inno Setup创建软件安装包有所帮助。如果您在使用过程中遇到任何问题,欢迎查阅Inno Setup的官方文档或在相关论坛寻求帮助。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容