Inno Setup 安装脚本教程:自动安装 VC++ 运行库并配置数据目录

本文档介绍了如何使用 Inno Setup 创建一个安装程序,具备以下功能:

  • 自动安装 Visual C++ Redistributable

  • 安装完成后提示用户选择数据保存目录

  • 将所选路径写入 JSON 配置文件

📁 项目结构假设

你的应用目录结构类似如下:

YourInstallerProject/
├── setup.iss
├── VC_redist.x64.exe
└── app/
    └── resources/
        └── app/

🧾 安装脚本说明(setup.iss)

1. 安装 VC++ Redistributable

[Run]
Filename: "{tmp}\VC_redist.x64.exe"; Parameters: "/install /quiet /norestart"; StatusMsg: "正在安装 Visual C++ Redistributable..."; Flags: waituntilterminated
  • VC_redist.x64.exe 安装包复制到安装目录或打包时内嵌。

  • 使用 /quiet/norestart 参数实现静默安装。

2. 启动主程序(可选)

Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
  • 安装完成后自动启动应用(非静默模式下)。


3. 安装后配置数据目录和 JSON 文件

[Code] 区域添加以下代码,实现配置数据目录:

const
  BIF_RETURNONLYFSDIRS = $0001;

function BrowseForFolder(const DialogTitle, InitialDir: string): string;
var
  Shell: Variant;
  Folder: Variant;
begin
  Result := '';
  try
    Shell := CreateOleObject('Shell.Application');
    Folder := Shell.BrowseForFolder(0, DialogTitle, BIF_RETURNONLYFSDIRS, InitialDir);
    if not VarIsEmpty(Folder) then
      Result := Folder.Items().Item().Path;
  except
    Result := '';
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
  InstallPath: string;
  DataSavePath: string;
  ConfigFilePath: string;
  JSONContent: string;
begin
  if CurStep = ssPostInstall then
  begin
    InstallPath := ExpandConstant('{app}');

    // 弹出目录选择对话框
    DataSavePath := BrowseForFolder('请选择数据保存目录,用于数据下载', '');

    if DataSavePath = '' then
    begin
      MsgBox('未选择有效目录,安装程序将退出。', mbError, MB_OK);
      Abort;
    end;

    // 构建 JSON 配置路径
    ConfigFilePath := AddBackslash(InstallPath) + 'resources\app\dir_config.json';

    // 替换路径中的反斜杠
    StringChangeEx(DataSavePath, '\', '/', True);
    JSONContent := '{"auto_data_root": "' + DataSavePath + '"}';

    // 创建目录并保存文件
    ForceDirectories(ExtractFileDir(ConfigFilePath));

    if not SaveStringToFile(ConfigFilePath, JSONContent, False) then
    begin
      MsgBox('无法保存配置文件,安装程序将退出。', mbError, MB_OK);
      Abort;
    end;
  end;
end;

代码说明

  • BrowseForFolder(...):弹出一个目录选择窗口。

  • CurStepChanged(...):在安装完成后(ssPostInstall)触发:

    • 获取安装目录 {app}

    • 获取用户选择的数据目录

    • 将其保存为 JSON 配置文件:dir_config.json


✅ 使用指南

  1. 使用 Inno Setup Compiler 打开并编译该脚本。

  2. 生成的安装程序会:

    • 安装 VC++ 运行库

    • 安装你的主程序

    • 要求用户选择一个目录,并将路径写入 JSON 文件中


💡 注意事项

  • 脚本使用了 COM 对象 Shell.Application,在某些极简 Windows 环境中可能无法调用。

  • 请确保 VC_redist.x64.exe 与安装包一起打包或嵌入。

  • 如果路径中包含非 ASCII 字符,保存为 UTF-8 编码可能更稳定。


📌 示例输出的 JSON 内容

{
  "auto_data_root": "D:/MyDownloadFolder"
}

🔚 结语

通过这个脚本,你可以实现一个功能完备的安装流程,用户友好且易于维护。如果你需要进一步集成注册表设置、快捷方式、或更多安装前检查,也可以继续扩展这个脚本。

欢迎将此脚本用于自己的项目!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

磊磊cpp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值