使用AutoCAD注册表项和Inno Setup安装AutoCAD vlx文件

时间:2018-04-02 06:57:12

标签: inno-setup autocad-plugin

我有一些vlx文件要添加到我的 AutoCAD 文件夹中。我想用Inno Setup制作安装包,它将在安装后安装我的vlx文件。我得到了AutoCAD 2014的注册表项。

HKEY_LOCAL_MACHINE\Software\Autodesk\AutoCAD\R19.1\ACAD-D001:409

请告诉我上述案例的inno设置脚本。

2 个答案:

答案 0 :(得分:1)

我发现这个article表明:

  

下面是一个Inno Setup / Pascal代码示例,介绍如何遍历AutoCAD版本并为名为“MyCADApp”的虚拟应用程序创建相关的LspLoad注册表项。纯粹是为了证明这种机制。它被剥离到64位Windows上的64位ACAD来演示原理。

     

一旦掌握了pascal脚本,就可以相对直接地修改/扩展它以在64位Windows上添加32位CAD和32位Windows上的32位CAD,当然对Bricscad也是如此。您可能需要的所有附加功能,例如“IsWin64”,可以在Inno Setup帮助文件的“支持功能参考”中找到。

procedure AddACADRegKey (Release: String); {eg 'R19.0 for ACAD 2013'}
var
  RunTimeNum: String; {eg '19'}
  AllProductID: TArrayOfString;
  ProductID: String; {eg 'ACAD-9001:409'}
  KeyPathShort: String;{eg 'SOFTWARE\Autodesk\AutoCAD\'}
  KeyPathLong: String; {eg 'SOFTWARE\Autodesk\AutoCAD\R18.1\ACAD-9001:409\Applications\MyCADApp'}
  KeyStringShort: String; {eg c:\Program Files\MyCADApp\LspLoad.'}
  KeyStringLong: String; {eg 'c:\Program Files\MyCADApp\LspLoad.19.x64.arx'}   
  I: Integer;
begin
  RunTimeNum := Copy (Release, 2, 2);
  KeyStringShort := ExpandConstant('{pf}\MyCADApp\LspLoad.');
  KeyPathShort := 'SOFTWARE\Autodesk\AutoCAD\';
  if RegGetSubkeyNames(HKLM64, KeyPathShort + Release, AllProductID)
    then begin
      for I := 1 to GetArrayLength(AllProductID) do begin
        ProductID := AllProductID[I-1];
        KeyPathLong := KeyPathShort + Release + '\' + ProductID + '\Applications\MyCADApp';
        KeyStringLong := KeyStringShort + RunTimeNum + '.x64.arx';
        RegWriteDWordValue (HKLM64, KeyPathLong,'LOADCTRLS', 2);
        RegWriteStringValue (HKLM64, KeyPathLong,'LOADER',KeyStringLong);
      end;
    end;
end;
  

其用法示例 - 要测试ACAD 2012和ACAD 2013并添加由最终安装事件触发的注册表项,您需要添加以下代码:

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep=ssPostInstall
    then begin
        AddAcadRegKey ('R18.2');{ACAD 2012}
        AddAcadRegKey ('R19.0');{ACAD 2013}
   end;
end;

您可以在该讨论主题中找到更多信息。

以下是我在注册表中检查的一个示例:

Registry

现在,我向您展示的代码创建了这些密钥:

RegWriteDWordValue (HKLM64, KeyPathLong,'LOADCTRLS', 2);
RegWriteStringValue (HKLM64, KeyPathLong,'LOADER',KeyStringLong);

你真的尝试过吗?为什么不手动将VLX添加到启动套件中,然后查看对注册表所做的更改?然后你知道你需要做什么。

我在Google中进行了一次搜索时发现了here信息:

加载.NET程序集

  

确定.NET程序集的构建类型后,必须确定如何将其加载到AutoCAD中。可以手动加载.NET程序集文件,也可以加载需求。

     
      
  • 手动 - 在命令提示符下或在AutoLISP文件中使用NETLOAD命令。
  •   
  • 需求负载 - 定义AutoCAD启动时要加载的应用程序的密钥。密钥必须放在要加载应用程序的AutoCAD特定版本的Application键下。
  •   
     

应用程序的密钥可以包含以下密钥:

     

<强>描述   .NET程序集的描述是可选的。

     

<强> LOADCTRLS   控制加载.NET程序集的方式和时间。

     
      
  • 1 - 检测到代理对象时加载应用程序

  •   
  • 2 - 启动时加载应用程序

  •   
  • 4 - 在命令开始时加载应用程序

  •   
  • 8 - 应用户或其他应用程序的请求加载应用程序

  •   
  • 16 - 不要加载应用程序

  •   
  • 32 - 透明地加载应用程序

  •   
     

<强> LOADER   指定要加载的.NET程序集文件。

     

<强>托管   指定应加载的文件是.NET程序集或ObjectARX文件。对于.NET程序集文件,设置为1.

答案 1 :(得分:0)

您应该使用自动加载器包格式。然后,您不必弄乱注册表项,并且您的Inno安装脚本只是安装到用户数据文件夹,程序数据或程序文件下的Autodesk \ ApplicationPlugins文件夹。