You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:基于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'参数为实际节名称。

需求匹配说明

  1. 自带标准欢迎界面,包含“取消”“下一步”按钮。
  2. 目标目录页面默认填充注册表读取的路径,支持用户手动修改。
  3. 自动检测目标子目录是否存在,读取新旧数据库日期并弹出覆盖确认。
  4. 任意阶段点击“取消”都会触发确认弹窗。
  5. 安装完成后弹出成功提示,最终进入标准完成页面。

内容的提问来源于stack exchange,提问作者PapagoFX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 18:05:37