You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

请求提供基于AutoCAD 2014注册表键的vlx文件Inno Setup安装脚本

没问题,我给你整理了一个适配AutoCAD 2014的Inno Setup脚本,刚好能实现你把VLX文件部署到AutoCAD安装目录的需求,而且是在安装完成后(Post Install阶段)执行部署操作。下面是完整脚本,我会逐段给你解释关键点:

完整Inno Setup脚本
[Setup]
AppName=AutoCAD VLX工具包
AppVersion=1.0
DefaultDirName={tmp}
DisableProgramGroupPage=yes
OutputDir=.\Output
OutputBaseFilename=AutoCAD_VLX_Installer
Compression=lzma2/ultra
SolidCompression=yes

[Files]
; 这里列出你要部署的所有VLX文件,把它们打包到安装包的临时目录
Source: "你的VLX文件路径\*.vlx"; DestDir: "{tmp}"; Flags: ignoreversion

[Code]
var
  AutoCADInstallPath: String;

function InitializeSetup(): Boolean;
var
  RegKey: String;
begin
  Result := True;
  AutoCADInstallPath := '';
  
  ; 读取AutoCAD 2014的注册表安装路径
  ; 先尝试64位系统的注册表路径
  RegKey := 'Software\Autodesk\AutoCAD\R19.1\ACAD-D001:409';
  if RegQueryStringValue(HKLM64, RegKey, 'Location', AutoCADInstallPath) then
  begin
    Log('找到64位AutoCAD 2014安装路径: ' + AutoCADInstallPath);
  end
  else
  begin
    ; 如果64位没找到,尝试32位系统的注册表路径
    if RegQueryStringValue(HKLM, RegKey, 'Location', AutoCADInstallPath) then
    begin
      Log('找到32位AutoCAD 2014安装路径: ' + AutoCADInstallPath);
    end
    else
    begin
      MsgBox('未检测到AutoCAD 2014的注册表信息,请确认已安装AutoCAD 2014!', mbError, MB_OK);
      Result := False;
    end;
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
  VLXFiles: TArrayOfString;
  I: Integer;
  DestPath: String;
begin
  ; 在PostInstall阶段执行文件部署
  if CurStep = ssPostInstall then
  begin
    ; 获取临时目录下的所有VLX文件
    if FindFiles(ExpandConstant('{tmp}\*.vlx'), VLXFiles) then
    begin
      ; 拼接AutoCAD的支持文件目录(通常是安装目录下的Support文件夹)
      ; 如果你的VLX需要放到其他子目录,修改这里的路径即可
      DestPath := AutoCADInstallPath + '\Support';
      
      ; 确保目标目录存在
      if not DirExists(DestPath) then
      begin
        CreateDir(DestPath);
      end;
      
      ; 逐个复制VLX文件到目标目录
      for I := 0 to GetArrayLength(VLXFiles) - 1 do
      begin
        if FileCopy(ExpandConstant('{tmp}\') + VLXFiles[I], DestPath + '\' + VLXFiles[I], False) then
        begin
          Log('成功复制文件: ' + VLXFiles[I]);
        end
        else
        begin
          Log('复制文件失败: ' + VLXFiles[I]);
          MsgBox('文件' + VLXFiles[I] + '部署失败,请检查权限!', mbWarning, MB_OK);
        end;
      end;
      
      MsgBox('VLX文件已成功部署到AutoCAD 2014目录!', mbInformation, MB_OK);
    end
    else
    begin
      MsgBox('未找到要部署的VLX文件!', mbWarning, MB_OK);
    end;
  end;
end;
脚本关键点解释
  • [Setup]段:这里是安装包的基础配置,比如安装包名称、输出路径、压缩方式等。我把DefaultDirName设为{tmp},因为我们不需要把VLX文件直接安装到用户指定的目录,而是临时存放后再复制到AutoCAD目录。
  • [Files]段:把你所有的VLX文件打包到安装包的临时目录,ignoreversion表示忽略文件版本检查,避免不必要的冲突。记得把"你的VLX文件路径\*.vlx"替换成你本地VLX文件的实际路径。
  • [Code]段
    • InitializeSetup函数:在安装开始前读取AutoCAD 2014的注册表键,获取它的安装路径。同时兼容32位和64位系统,如果没找到注册表信息,会弹出错误提示并终止安装。
    • CurStepChanged函数:在ssPostInstall(安装完成后)阶段执行文件部署。我们把临时目录里的VLX文件复制到AutoCAD的Support子目录(这是AutoCAD加载自定义工具的默认目录,如果你需要放到其他目录,修改DestPath的拼接逻辑即可)。复制过程中会记录日志,失败的话会弹出警告提示。
使用注意事项
  • 确保你已经安装了Inno Setup编译器(推荐最新版本)。
  • 替换[Files]段里的VLX文件路径为你本地的实际路径。
  • 如果你的VLX需要放到AutoCAD的其他子目录(比如LISP),修改DestPath的拼接代码即可。
  • 测试安装包时,建议用管理员权限运行,避免文件复制时的权限问题。

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

火山引擎 最新活动