求助:基于Inno Setup开发带注册表路径读取的3D模型数据库安装程序
Inno Setup 3D模型数据库安装脚本实现
以下是完全符合你需求的Inno Setup脚本,你只需根据实际情况替换标注的占位内容即可:
[Setup] AppName=3D模型数据库安装程序 AppVersion=1.0 DefaultDirName={reg:HKEY_LOCAL_MACHINE\SOFTWARE\你的CAD程序名称,InstallPath|C:\默认CAD安装路径} DefaultGroupName=3D模型数据库 OutputDir=Output OutputBaseFilename=3DModelsDBInstaller Compression=lzma SolidCompression=yes ShowLanguageDialog=no [Files] ; 替换为你的3D模型数据库ZIP包路径 Source: "3DModelsDB.zip"; DestDir: "{tmp}"; Flags: dontcopy noencryption [Code] var TargetPage: TInputDirWizardPage; ExistingDBDate: String; NewDBDate: String; // 读取INI文件中的DATE值 function GetINIDate(INIPath: String): String; begin Result := ''; if FileExists(INIPath) then Result := GetIniString('General', 'DATE', '', INIPath); end; // 取消按钮确认逻辑 procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean); begin Confirm := True; Cancel := MsgBox('您确定要终止3D模型数据库安装程序吗?(是/否)', mbConfirmation, MB_YESNO) = IDYES; end; procedure InitializeWizard; begin // 创建自定义目标目录页面,确保默认值来自注册表 TargetPage := CreateInputDirPage(wpWelcome, '选择目标目录', '请选择CAD程序的主目录', '3D模型数据库将安装到该目录的子文件夹中', False, ''); // 设置默认目录为Setup中定义的路径 TargetPage.Add(''); TargetPage.Values[0] := ExpandConstant('{default}'); end; function NextButtonClick(CurPageID: Integer): Boolean; var TargetDir: String; DBSubDir: String; TempZIPPath: String; NewINIPath: String; begin Result := True; if CurPageID = TargetPage.ID then begin TargetDir := TargetPage.Values[0]; // 替换为你的3D模型子目录名称 DBSubDir := TargetDir + '\program_directory\3D_models_directory'; TempZIPPath := ExpandConstant('{tmp}\3DModelsDB.zip'); NewINIPath := ExpandConstant('{tmp}\base.ini'); // 假设ZIP中base.ini在根目录 // 从临时ZIP提取base.ini,读取新数据库日期 ExtractTemporaryFile('3DModelsDB.zip'); ExtractZip(TempZIPPath, ExpandConstant('{tmp}'), 'base.ini'); NewDBDate := GetINIDate(NewINIPath); if DirectoryExists(DBSubDir) then begin // 读取现有数据库的日期 ExistingDBDate := GetINIDate(DBSubDir + '\base.ini'); // 弹出覆盖确认框 if MsgBox(Format('已检测到现有数据库'#13#10'现有数据库日期: %s'#13#10'新数据库日期: %s'#13#10'是否覆盖现有数据库?', [ExistingDBDate, NewDBDate]), mbConfirmation, MB_YESNO) = IDNO then begin Result := False; Exit; end; end else begin // 创建目标子目录 ForceDirectories(DBSubDir); end; // 解压整个ZIP到目标子目录 ExtractZip(TempZIPPath, DBSubDir, '*'); MsgBox('3D模型数据库安装成功!', mbInformation, MB_OK); end; end;
关键修改点说明
- 注册表路径替换:在
[Setup]段的DefaultDirName中,将HKEY_LOCAL_MACHINE\SOFTWARE\你的CAD程序名称,InstallPath替换为存储CAD程序安装路径的实际注册表项和键值。 - ZIP包路径替换:在
[Files]段中,将3DModelsDB.zip替换为你的数据库ZIP包的实际路径。 - 子目录名称替换:在
NextButtonClick函数中,将\program_directory\3D_models_directory替换为你需要的目标子目录结构。 - INI配置适配:如果你的
base.ini中DATE变量不在[General]节下,修改GetINIDate函数中的'General'参数为实际节名称。
需求匹配说明
- 自带标准欢迎界面,包含“取消”“下一步”按钮。
- 目标目录页面默认填充注册表读取的路径,支持用户手动修改。
- 自动检测目标子目录是否存在,读取新旧数据库日期并弹出覆盖确认。
- 任意阶段点击“取消”都会触发确认弹窗。
- 安装完成后弹出成功提示,最终进入标准完成页面。
内容的提问来源于stack exchange,提问作者PapagoFX
相关产品推荐
相关产品推荐

