本文档介绍了如何使用 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
-
✅ 使用指南
-
使用 Inno Setup Compiler 打开并编译该脚本。
-
生成的安装程序会:
-
安装 VC++ 运行库
-
安装你的主程序
-
要求用户选择一个目录,并将路径写入 JSON 文件中
-
💡 注意事项
-
脚本使用了 COM 对象
Shell.Application
,在某些极简 Windows 环境中可能无法调用。 -
请确保
VC_redist.x64.exe
与安装包一起打包或嵌入。 -
如果路径中包含非 ASCII 字符,保存为 UTF-8 编码可能更稳定。
📌 示例输出的 JSON 内容
{
"auto_data_root": "D:/MyDownloadFolder"
}
🔚 结语
通过这个脚本,你可以实现一个功能完备的安装流程,用户友好且易于维护。如果你需要进一步集成注册表设置、快捷方式、或更多安装前检查,也可以继续扩展这个脚本。
欢迎将此脚本用于自己的项目!