使用Advanced Installer 13.7进行AutoCAD2010插件打包 三(打包软件使用)

本文详细介绍如何使用AdvancedInstaller为AutoCAD 2010及以下版本进行打包,包括必要的注册表部署步骤。文章指出2010及以下版本与2012以上版本在打包过程中的主要区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇文章中介绍了autocad 2012以上版本如何进行打包,此处介绍2010以下版本是如何打包的。
相对来说,2010以下版本与2012以上版本打包不同之处在于以下两点:
1)2010以下版本打包需要进行注册表部署,2012以上版本不需要。
2)2012以上版本需要进行配置文件部署,并且安装位置必须固定,而2010以下版本不要。
使用Advanced Installer 步骤与上一篇类似,但必须添加注册表信息。按照图中的层级一步一步的添加。当添加完最后一个文件夹时,右键点击New Value,来创建值。
注:图中三个值都必须添加。
这里写图片描述
新建值中选择文件,然后选择编译好的dll文件。
这里写图片描述
其余步骤按上一篇介绍的来做就好了。当安装好后,使用regedit命令查看注册表,就会发现新建的注册表已经添加进去。

包括软件打包apk插件 ------------------------ Auto.js使用JavaScript作为脚本语言,目前使用Rhino 1.7.7.2作为脚本引擎,支持ES5与部分ES6特性。 因为Auto.js是基于JavaScript的,学习Auto.js的API之前建议先学习JavaScript的基本语法和内置对象,可以使用教程前面的两个JavaScript教程链接来学习。 如果您想要使用TypeScript来开发,目前已经有开发者公布了一个可以把使用TypeScript进行Auto.js开发的工具,参见Auto.js DevTools。 如果想要在电脑而不是手机上开发Auto.js,可以使用VS Code以及相应的Auto.js插件使得在电脑上编辑的脚本能推送到手机运行,参见Auto.js-VSCode-Extension。 本文档的章节大致上是以模块来分的,总体上可以分成"自动操作"类模块(控件操作、触摸模拟、按键模拟等)和其他类模块(设备、应用、界面等)。 "自动操作"的部分又可以大致分为基于控件和基于坐标的操作。基于坐标的操作是传统按键精灵、触摸精灵等脚本软件采用的方式,通过屏幕坐标来点击、长按指定位置模拟操作,从而到达目的。例如click(100, 200), press(100, 200, 500)等。这种方式在游戏类脚本中比较有可行性,结合找图找色、坐标放缩功能也能达到较好的兼容性。但是,这种方式对一般软件脚本却难以达到想要的效果,而且这种方式需要安卓7.0版本以上或者root权限才能执行。所以对于一般软件脚本(例如批量添加联系人、自动提取短信验证码等等),我们采用基于控件的模拟操作方式,结合通知事情、按键事情等达成更好的工作流。这些部分的文档参见基于控件的操作和基于坐标的操作。 其他部分主要包括: app: 应用。启动应用,卸载应用,使用应用查看、编辑文件、访问网页,发送应用间广播等。 console: 控制台。记录运行的日志、错误、信息等。 device: 设备。获取设备屏幕宽高、系统版本等信息,控制设备音量、亮度等。 engines: 脚本引擎。用于启动其他脚本。 events: 事件与监听。按键监听,通知监听,触摸监听等。 floaty: 悬浮窗。用于显示自定义的悬浮窗。 files: 文件系统。文件创建、获取信息、读写。 http: HTTP。发送HTTP请求,例如GET, POST等。 images, colors: 图片和图色处理。截图,剪切图片,找图找色,读取保存图片等。 keys: 按键模拟。比如音量键、Home键模拟等。 shell: Shell命令。 threads: 多线程支持。 ui: UI界面。用于显示自定义的UI界面,和用户交互。 除此之外,Auto.js内置了对Promise。
<?xml version="1.0" encoding="utf-8"?> <ApplicationPackage xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Name="忠利模架软件" Description="忠利模架软件" Author="DYH"> <CompanyDetails Name="DYH" Email="18917561559@163.com"/> <Components> <!-- AutoCAD 2019-2022 (R23.1-R24) --> <RuntimeRequirements os="win64" platform="AutoCAD*" SeriesMin="R23.1" SeriesMax="R24"/> <ComponentEntry AppDescription="忠利模架软件 by DYH" AppName="忠利模架软件" AppType=".NET" LoadOnCommandInvocation="true" LoadOnAutoCADStartup="false"> <RuntimeModules> <RuntimeModule ModuleName=".\net48\BW.dll"/> <RuntimeModule ModuleName=".\net48\bzxl.dll"/> <RuntimeModule ModuleName=".\net48\ktj.dll"/> <RuntimeModule ModuleName=".\net48\ljmtj.dll"/> <RuntimeModule ModuleName=".\net48\pkbz.dll"/> <RuntimeModule ModuleName=".\net48\pmxlg.dll"/> <RuntimeModule ModuleName=".\net48\tzcl.dll"/> <RuntimeModule ModuleName=".\net48\wodechajian.cuix"/> </RuntimeModules> <Commands GroupName="DYHCadTool"> <Command Local="hellocad" Global="wdcj" StartupCommand="true"/> </Commands> </ComponentEntry> <!-- AutoCAD 2023+ (R25+) --> <RuntimeRequirements os="win64" platform="AutoCAD*" SeriesMin="R25.0"/> <ComponentEntry AppDescription="忠利模架软件 by DYH" AppName="忠利模架软件" AppType=".NET" LoadOnCommandInvocation="true" LoadOnAutoCADStartup="false"> <RuntimeModules> <RuntimeModule ModuleName=".\net80\BW.dll"/> <RuntimeModule ModuleName=".\net80\bzxl.dll"/> <RuntimeModule ModuleName=".\net80\ktj.dll"/> <RuntimeModule ModuleName=".\net80\ljmtj.dll"/> <RuntimeModule ModuleName=".\net80\pkbz.dll"/> <RuntimeModule ModuleName=".\net80\pmxlg.dll"/> <RuntimeModule ModuleName=".\net80\tzcl.dll"/> <RuntimeModule ModuleName=".\net80\wodechajian.cuix"/> </RuntimeModules> <Commands GroupName="DYHCadTool"> <Command Local="hellocad" Global="wdcj" StartupCommand="true"/> </Commands> </ComponentEntry> </Components> </ApplicationPackage> CAD运行时插件未被加载,命令栏显示: 加载自定义文件成功。自定义组: ACAD 加载自定义文件成功。自定义组: CUSTOM 加载自定义文件成功。自定义组: MODELDOC 加载自定义文件成功。自定义组: APPMANAGER 加载自定义文件成功。自定义组: FEATUREDAPPS 加载自定义文件成功。自定义组: TANGENT 加载自定义文件成功。自定义组: 天正快捷菜单 正在重生成模型。 运行时扩展程序“d:\t20天正建筑 v10.0\sys23x64\tch_elevation.arx”已加载。 ; 错误: 输入的列表有缺陷 AutoCAD 菜单实用工具 已加载。*取消* 命令: *取消* FileTab COMMANDLINE 命令: 命令: 命令: 加载天正菜单文件: D:\T20天正建筑 V10.0\sys23x64\tch.tmn LOGINITIALWORKSPACEESW 命令: tshowbar 已成功地卸载自定义文件。自定义组: 天正快捷菜单 加载自定义文件成功。自定义组: 天正快捷菜单
最新发布
07-20
<think>我们面对的是一个AutoCAD插件.bundle)的安装问题。根据提供的ApplicationPackage.xml文件,这个插件针对不同版本的AutoCAD(R23.1-R24和R25+)分别提供了两个不同的组件(ComponentEntry),每个组件指定了不同.NET框架版本(net48和net80)的DLL文件。 用户反馈的问题是:插件没有被加载,命令栏显示了一系列消息,包括“错误: 输入的列表有缺陷”,以及一些自定义组加载和卸载的消息。 分析步骤: 1. 检查XML文件结构:提供的XML文件结构看起来是完整的,符合AutoCAD插件打包规范。 2. 错误消息:“错误: 输入的列表有缺陷” - 这通常与AutoLISP或脚本中的列表语法错误有关,但这里可能是由于插件加载过程中某个环节出错。 3. 插件加载机制:在ApplicationPackage.xml中,我们指定了通过命令(Command)来启动插件,并且设置了`StartupCommand="true"`,这意味着在AutoCAD启动时会尝试执行这个命令(即全局命令"wdcj")。 可能的原因: a) 插件DLL文件缺失或路径错误:在RuntimeModule中指定的路径(如".\net48\BW.dll")是相对于bundle文件夹的。请确保这些DLL文件存在于正确的目录中。 b) 插件依赖的.NET框架版本未安装:net48需要.NET Framework 4.8,net80需要.NET 8.0。请确保目标机器上安装了相应版本的.NET框架。 c) 插件AutoCAD版本不匹配:虽然XML中已经根据AutoCAD版本(R23.1-R24和R25+)分别指定了不同的组件,但需要确认当前运行的AutoCAD版本是否在支持的范围内。 d) 命令冲突:全局命令"wdcj"可能与其他已加载的命令冲突。 e) 插件代码本身的问题:插件中的代码可能在初始化时抛出异常。 解决方案: 1. 验证文件结构:确保bundle文件夹的结构如下: - YourPlugin.bundle\ - Contents\ - ApplicationPackage.xml - net48\ (包含BW.dll, bzxl.dll, ... , wodechajian.cuix) - net80\ (同上,但为net80编译的版本) 2. 检查.NET框架:确保安装了正确版本的.NET框架。 3. 调试加载过程: - 在AutoCAD中,使用NETLOAD命令手动加载其中一个DLL(比如BW.dll),看是否有错误信息。 - 查看AutoCAD的启动日志(或使用APPLOAD命令查看加载的应用程序)来确认插件是否被加载。 4. 检查命令执行: - 在AutoCAD命令行中尝试直接输入命令"wdcj",看是否能够执行。 5. 检查事件日志:如果插件崩溃,Windows事件查看器中可能会有.NET相关的错误日志。 6. 考虑“输入的列表有缺陷”错误:这个错误可能是由于其他原因(比如acad.lsp或其他自动加载的脚本)引起的,不一定直接与这个插件相关。可以尝试在干净的AutoCAD环境中测试(例如,使用命令行参数“/nologo”启动AutoCAD,并跳过所有启动脚本)。 7. 检查cuix菜单文件:XML中加载了一个cuix文件(wodechajian.cuix),这个文件可能包含自定义菜单和命令。如果这个cuix文件损坏或格式不正确,可能会导致加载错误。可以尝试单独加载这个cuix文件(使用CUILOAD命令)来测试。 8. 注意:在XML中,我们为两个不同的AutoCAD版本范围指定了组件,AutoCAD会根据版本自动选择合适的组件。但需要确保AutoCAD能够正确解析这个XML文件。可以尝试简化XML(比如只保留一个组件)来测试。 由于我们无法直接运行和调试,这里提供一些建议的步骤代码(不是可执行代码,而是操作步骤)和检查点。 如果以上步骤不能解决问题,可能需要更详细的日志信息。 由于问题描述中包含了AutoCAD的反馈信息,其中有一条“错误: 输入的列表有缺陷”,这通常与Lisp有关。因此,请检查是否在插件使用了Lisp代码,或者是否在cuix文件中定义了Lisp命令。 另外,注意在XML文件中,我们指定了`LoadOnAutoCADStartup="false"`,这意味着插件不会在AutoCAD启动时自动加载,而是通过命令来触发加载(因为设置了`LoadOnCommandInvocation="true"`和`StartupCommand="true"`)。当AutoCAD启动时,它会执行一次全局命令"wdcj"(即StartupCommand),以此来触发加载插件。因此,请确保这个命令在插件中已经被正确实现。 如果问题仍然存在,建议在插件代码的入口点(如IExtensionApplication接口的Initialize方法)中添加日志记录,以便跟踪初始化过程。 由于我们没有实际的代码,这里无法提供具体的代码修改。但是,我们可以提供一个简单的日志记录方法示例(在.NET中): 例如,在Initialize方法中,可以这样写: ```csharp using System.IO; using Autodesk.AutoCAD.Runtime; [assembly: ExtensionApplication(typeof(MyPlugin.Initialization))] namespace MyPlugin { public class Initialization : IExtensionApplication { public void Initialize() { // 记录初始化开始 Log("Initialize: Start"); try { // 初始化代码 // ... Log("Initialize: Successful"); } catch (System.Exception ex) { Log($"Initialize failed: {ex.Message}"); } } public void Terminate() { // 清理代码 } private void Log(string message) { string logFile = @"C:\PluginLog.txt"; using (StreamWriter sw = new StreamWriter(logFile, true)) { sw.WriteLine($"{System.DateTime.Now}: {message}"); } } } } ``` 这样,当插件被加载时,会在C盘根目录下生成一个日志文件,记录初始化过程是否成功。 最后,请注意:在XML中,我们为同一个插件定义了两个组件,分别针对不同的AutoCAD版本。确保在对应的AutoCAD版本中加载了正确的组件(即对应的DLL路径)。例如,在AutoCAD 2022(R23.1-R24)中,应该加载net48目录下的DLL,而在AutoCAD 2023(R25)中,应该加载net80目录下的DLL。 如果问题仍然无法解决,请提供更详细的错误信息,特别是尝试手动加载DLL时的错误信息。 由于我们无法直接运行调试,以上建议为常规排查步骤。 相关问题: 根据问题,提出以下相关问题:</think>### 问题分析 根据您提供的 XML 配置文件和错误信息,问题可能出在以下几个方面: 1. **.NET 版本兼容性问题**:不同 AutoCAD 版本的 .NET 运行时要求不同 2. **依赖项缺失**:插件依赖的 DLL 文件可能未正确部署或签名 3. **命令冲突**:全局命令 `wdcj` 可能与其他插件冲突 4. **CUIX 菜单加载问题**:菜单文件可能损坏或版本不兼容 5. **权限问题**:AutoCAD 可能没有足够的权限加载插件 ### 解决方案 #### 1. 检查 .NET 版本兼容性 确保安装对应版本的 .NET 框架: - 对于 AutoCAD 2019-2022:安装 [.NET Framework 4.8](https://dotnet.microsoft.com/download/dotnet-framework/net48) - 对于 AutoCAD 2023+:安装 [.NET 8.0 Runtime](https://dotnet.microsoft.com/download/dotnet/8.0) #### 2. 验证文件结构 确保插件目录结构完全匹配: ``` 忠利模架软件.bundle/ └── Contents/ ├── ApplicationPackage.xml ├── net48/ │ ├── BW.dll │ ├── bzxl.dll │ ├── ...(其他DLL) │ └── wodechajian.cuix └── net80/ ├── BW.dll ├── ...(其他DLL) └── wodechajian.cuix ``` #### 3. 修复命令加载机制 在 `AppDomain.CurrentDomain.AssemblyResolve` 中添加解析逻辑,确保正确加载依赖项: ```csharp // 在插件入口类中添加 using System.IO; using System.Reflection; public class PluginLoader { [CommandMethod("wdcj")] public void InitPlugin() { AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => { string folder = IsR25Plus() ? "net80" : "net48"; string assemblyPath = Path.Combine( Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), folder, new AssemblyName(args.Name).Name + ".dll" ); return File.Exists(assemblyPath) ? Assembly.LoadFrom(assemblyPath) : null; }; // 加载主模块 Autodesk.AutoCAD.Runtime.SystemObjects.LoadModule( IsR25Plus() ? "net80/BW.dll" : "net48/BW.dll" ); } private bool IsR25Plus() { // 根据版本号判断 return Convert.ToInt16(Application.Version) >= 25; } } ``` #### 4. 修复 CUIX 菜单加载 在 XML 配置中添加显式菜单加载命令: ```xml <Commands GroupName="DYHCadTool"> <Command Local="hellocad" Global="wdcj" StartupCommand="true"/> <!-- 添加菜单加载命令 --> <Command Local="LoadMenu" Global="LOADMENU" CommandString="CUILOAD "wodechajian.cuix""/> </Commands> ``` #### 5. 添加签名验证(可选) 如果 DLL 被阻止加载,添加强名称签名: ```powershell # 生成密钥对 sn -k KeyPair.snk # 重新编译所有DLL(在项目文件中) <PropertyGroup> <SignAssembly>true</SignAssembly> <AssemblyOriginatorKeyFile>KeyPair.snk</AssemblyOriginatorKeyFile> </PropertyGroup> ``` ### 调试建议 1.AutoCAD使用 `NETLOAD` 命令手动加载 DLL 2. 查看事件查看器中的 .NET 运行时错误日志 3. 使用 [Fusion Log Viewer](https://learn.microsoft.com/zh-cn/dotnet/framework/tools/fuslogvw-exe-assembly-binding-log-viewer) 检查程序集绑定失败 4. 在注册表添加调试键值: ``` HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\RXX.X\ACAD-XXXX:XXX\Applications\<YourPlugin> DWORD: LoaderDebug = 1 ``` ### 错误处理 针对 "输入的列表有缺陷" 错误,在 LISP 接口添加类型检查: ```lisp (defun safe-list-process (lst) (if (and (listp lst) (vl-every 'numberp lst)) (process-list lst) ; 你的处理函数 (princ "\n错误: 无效的输入列表")) ) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值