ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Win10下ObjectARX 2015 Wizard安装失败?从根因到手动部署全解析

Win10下ObjectARX 2015 Wizard安装失败?从根因到手动部署全解析 如果你是因为在Win10或者Win8上装完ObjectARX 2015 Wizard打开VS新建项目却找不到模板才点进这篇文章——那恭喜你你不是一个人。这个故障在CAD二次开发圈子里隔三差五就会被问一次几乎成了每个从Autodesk官网下载老SDK、想回归C开发的工程师必经的一道坎。所谓ObjectARX 2015 Wizard是Autodesk为ObjectARX 2015 SDK配套提供的Visual Studio项目向导插件安装后能在VS里直接生成带好编译配置、链接配置和入口代码的arx/dbx工程骨架。这些年只要涉及AutoCAD 2015的插件开发基本绕不开它。问题在于这个Wizard的安装包是2014年前后做出来的设计时根本没考虑过Win8以上的权限模型、UAC规则和VS新版本所以在Win10/Win8上安装后创建项目失败是大概率事件。这篇文章就是要把这个问题彻底讲透从它为什么失败的根因到按什么顺序排查再到最折腾但保证有效的手动部署方案最后给一条实在不行时的绕行路线。不管是刚入门的开发者还是被甲方锁死在老版本SDK上的老手应该都能从中找到可操作的办法。1. 这个故障的典型表现先来对号入座1.1 最常见的三种失败场景先说症状。很多人在Win10或Win8下遇到的并不是同一种失败但大致能归成下面三类。第一类安装包正常走完提示成功但打开VS之后新建项目对话框里完全没有ObjectARX相关的模板。这是最常见的。用户往往反复重装Wizard好几遍结果都一样模板就像蒸发了一样。这种现象通常不是安装包没装进去而是Wizard注册进VS的那一步被系统拦了。第二类新建项目对话框里能看到ObjectARX 2015 Project的图标但点确定后立马弹错误框什么ObjectARX 2015 Project Wizard 已停止工作、未能创建项目之类的。这类问题比第一类稍微好定位一点因为至少说明模板文件已经进入VS的识别范围问题出在向导运行时大概率是环境变量、路径或者组件缺失。第三类安装包本身在中途就报错比如MSI返回1713、1723这类InstallShield错误码或者安装界面走几步就回滚。这常见于Win8.1和某些Win10企业版系统多半是权限不足、杀毒软件拦截或者安装器与系统的UAC机制冲突。装了删、删了装的老哥基本都是被这个折磨。1.2 为什么Win7下正常到了Win10/Win8就翻车这里有一个让很多人困惑的点同一套ObjectARX 2015 Wizard在Win7上装好就能用换到Win10或Win8上就各种诡异。我最初也以为是系统坏了后来对比了好几台机器才想明白。ObjectARX 2015 Wizard诞生于2013-2014年那时候微软的主流系统还是Win7Windows 8都刚出来没两年。这个Wizard的安装器是基于老式MSI/InstallShield写的注册Visual Studio模板时走的是往Program Files目录里写文件的路径同时还要改动VS的模板缓存和注册表。Win7时代的UAC相对宽容管理员用户即使弹个确认框装完后进程也保留了完整权限。而Win10/Win8的UAC被加固过安装进程即使显示以管理员运行实际写入受保护目录时也可能会被重定向到VirtualStoreVS根本读不到真实路径于是模板就消失了。再加上Win10后来收紧了未签名驱动的加载规则、对老版MSI安装器的兼容策略也越来越保守所以老Wizard在Win10上翻车几乎是必然的只是翻法各有不同。1.3 先把问题分层找对修理方向这类问题最大的陷阱是一上来就重装系统或者换版本。我的经验是先把问题分成三个层级来定位能省掉大量无用功。第一层是安装层要确认Wizard安装包本身有没有真正的安装成功。判断标准很简单去看安装目录里有没有对应的文件和注册表项如果文件都在而VS里没模板那问题大概率不在安装层而在集成层。第二层是VS集成层这项要看模板文件有没有被VS正确识别、向导DLL有没有被正确加载。很多Win10下的失败案例都卡在这一层因为Wizard不是单纯把文件放到磁盘上就完事它还涉及到VS对模板目录的扫描和缓存刷新。第三层是项目生成层也就是说VS已经识别到模板但在点击确定后执行向导脚本时失败。这一层的问题又往往和环境变量、SDK路径、中文用户名这一类细节相关。把问题按这个框架对号入座之后再去查资料或者试方案效率会高得多。下面我就按这个逻辑把各层常见的坑和解决办法全摊开来说。2. 为什么偏偏是Win10和Win8根因拆解2.1 Wizard的本质模板、向导DLL、注册信息三件套想彻底理解这个故障必须先明白ObjectARX 2015 Wizard到底在系统里做了什么。它不是一个普通的绿色软件它往VS里塞了三样东西。第一样是项目模板文件通常是以.zip压缩包形式存在的模板里面包含了ObjectARX工程的初始代码、资源文件、项目配置文件等等。VS的新建项目对话框就是枚举这些模板文件的。第二样是向导DLL也就是真正干活的动态库当你点完确定后是这个DLL在后台执行交互窗口、收集你的项目名和SDK路径然后动态生成工程文件。第三样是注册信息它告诉VS哪些DLL要在什么时候被加载、模板要显示在哪个分类下。这三样缺一不可。删掉模板你看不到入口模板在但DLL没注册成功你点上就报错模板和DLL都在但注册信息损坏可能整个VS加载扩展时就把它忽略了。Win10/Win8上安装失败的具体原因虽然五花八门但归根到底就是这三样东西里有一样或者一样以上没被系统正确处理。2.2 UAC权限、SmartScreen、安装顺序老安装包的三重暴击针对Win10/Win8网上流传的各种所谓修复工具基本都是治标不治本搞清楚权限才是最关键的。第一个坑是UAC的目录重定向。老安装包在安装时默认往Program Files (x86)下面写文件这个过程在现代Windows上需要管理员权限。如果你双击安装包时弹出的UAC确认框你没有仔细看直接点了是倒还好一旦安装器被系统判定为低完整性级别写入操作会被静默重定向到用户目录下的VirtualStore。结果就是安装界面显示成功实际文件却不在它该在的位置VS枚举模板时自然什么都看不到。第二个坑是SmartScreen。Win10对从浏览器下载的安装包默认会做一次信誉检查。如果安装包没有经过代码签名或者签名链不完整SmartScreen会弹蓝色警告。很多人在这一步直接点了更多信息→仍要运行但装上之后仍然失败这是因为SmartScreen虽然没有完全阻止运行却在运行时降低了安装进程的权限级别导致写入受限。第三个坑是安装顺序。老Wizard设计时的假设是你先装好了完整的VS然后才装Wizard。如果你先装了Wizard后装VS或者VS正在运行时去装Wizard那么VS在启动时加载项目模板的枚举结果里就不会有它。安装完之后还必须用管理员权限重新跑一次VS才能触发模板缓存的重新加载这一点很多人不知道。2.3 VS版本对口性很多失败其实是版本配错这个原因听起来有点蠢但真的防不胜防。ObjectARX 2015对应AutoCAD 2015而它配套的Wizard官方支持的是Visual Studio 2012和Visual Studio 2013。很多人在Win10上随手装了VS2015甚至VS2017然后发现Wizard怎么装都不生效。为什么会这样因为Wizard的向导DLL底层引用了一大堆VS特定版本的COM接口和模板引擎组件VS2015的项目系统虽然长得很像VS2013但内部接口早就变了。向导DLL加载时如果连不上对应版本的组件整个扩展就会被悄然跳过不会报错也不会出现在扩展管理器里。另一个容易踩的是版本缩写带来的混乱VS2013的程序目录是Visual Studio 12.0VS2012是Visual Studio 11.0。网上很多教程说把模板放到12.0目录结果有人用的是VS2012放进去当然没用。我见过不少人在Win8上拿着Visual Studio Express版折腾——Express版根本不支持加载第三方项目向导这是产品定位决定的不是一个补丁就能解决的。2.4 缓存、组件与中文路径两个容易被忽略的隐形杀手除了上面几个大项还有两个小项虽然不常见但一旦碰上就特别恶心。第一是VS模板缓存。VS为了提高启动速度在第一次运行时会把模板目录扫描结果缓存到本地用户目录。如果你在安装Wizard之前已经打开过VS缓存里就没有ObjectARX模板即使后来安装了Wizard如果不刷新缓存VS依然不会重新扫描。这也是为什么很多教程都强调装完Wizard后要跑devenv /setup。第二是中文用户名和特殊路径。ObjectARX 2015 Wizard在生成项目时会往临时目录写中间文件还会读取用户文档目录下的模板副本。如果Windows用户名是中文或者用户目录路径里带空格向导脚本在处理路径时容易遇到编码问题导致项目生成到一半失败。Win8/Win10上这种情况尤其多。解决办法不是去改Windows账户名而是可以考虑创建一个纯英文的本地管理员账户专门用来做开发或者把VS的用户级模板目录用环境变量指到纯英文路径。3. 按优先级排查从零成本操作到深度修复3.1 第一步以管理员身份把安装包和VS都重跑一遍先别急着动注册表第一步是花五分钟时间把安装流程用最稳妥的方式重来一遍。首先把已经安装的Wizard卸载干净。老版本Wizard的卸载项通常带ObjectARX 2015 Wizard或者Autodesk ObjectARX 2015 Wizard字样卸载后最好重启一次。然后找到原始安装包右键选择以管理员身份运行。如果Win10弹SmartScreen点更多信息后不要直接点仍要运行而是先去安装包属性里勾选解除锁定再设置兼容模式为Windows 7勾选以兼容模式运行这个程序和以管理员身份运行此程序确定后再双击安装。装完Wizard后同样用管理员身份启动VS。如果VS里还是看不到模板把VS关掉再以管理员身份打开一次。整个过程听着简单但我实测下来这个流程已经能解决大概一半的问题。它的本质是绕开了UAC对安装和VS加载的双重限制。这里有个小细节卸载后清理一下临时目录。老Wizard安装时会往%TEMP%里释放一些脚本文件如果上次安装失败留下了残留第二次安装可能会因为同名文件冲突而再次失败。3.2 第二步检查VS扩展管理与插件启用状态如果管理员重装之后仍然不行就要看VS有没有真的加载到Wizard。VS2013里依次打开工具→扩展和更新在左侧的已安装分类里找有没有ObjectARZ或者Autodesk相关的扩展。如果能看到就要检查它右边的状态是启用还是禁用。有时候VS检测到向导DLL加载失败会默认把插件标记为禁用防止它反复崩溃。这时候点击禁用旁边的按钮选启用即可。在VS2012里路径稍有不同菜单路径是工具→扩展管理器界面更古老。如果这里什么都没有说明Wizard的注册信息可能没有被VS识别到那就直接跳到第三步先重建模板缓存看能不能把模板扫出来。还要注意一点VS2013以后在扩展和更新里如果看到一个扩展被标为兼容性警告那说明这个扩展注册时写的VS版本区间不包含当前VS版本。这种情况下强行启用也没有意义系统级判断可能已经拒绝加载了。正攻法是看看是不是装错了VS版本前面的章节已经解释过这个坑了。3.3 第三步重建VS项目模板缓存如果扩展管理器里能看到Wizard但新建项目时玄学性搜不到模板那八成是模板缓存作怪。VS项目模板缓存的位置在用户目录底下VS2013是%LOCALAPPDATA%\Microsoft\VisualStudio\12.0\ProjectTemplatesCacheVS2012把12.0换成11.0。在Win10的资源管理器地址栏里直接输入这个路径就能跳过去。把这个Cache目录下的内容删掉后以管理员身份打开命令提示符进入VS安装目录一般是C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE然后执行cd /d C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE devenv.exe /setup devenv.exe /installvstemplates/setup会重新生成VS的环境配置/installvstemplates会把ProjectTemplates目录里的模板重新解压并注册到用户缓存里。跑完后重新打开VS基本上新建项目里的模板列表就会刷新一遍。这个操作的原理是强制VS重新扫描模板目录把缓存文件中缺失的项目补回去。如果删缓存之后模板出来了那恭喜问题解决。如果连ProjectTemplates目录下的原始模板都没有那说明Wizard安装时根本就没把模板文件放到VS目录里这种情况要到第四章的手动部署方案里去解决了。3.4 第四步顺手排查杀毒软件和企业策略干扰这一条不常见但我真的在企业环境里碰到过。有些公司的终端安全软件会把Wizard安装时释放的DLL判定为可疑文件在安装过程中实时拦截导致文件写入成功但内容被吞掉一半。你安装时可能完全看不到拦截日志因为很多企业版杀软是静默处理的。如果你用的正好是公司电脑装完Wizard后可以先看一眼安装目录里的DLL文件大小是否正常再对比一下杀毒软件的隔离区记录。还有一类是AppLocker或者软件限制策略。一些Win10企业版系统默认禁止从临时目录执行未签名代码而Wizard安装器恰恰喜欢先把DLL释放到临时目录再注册。如果系统策略很严格整个安装可能回滚。这种环境下就没什么好办法绕过建议直接用第四章的手动部署方案能跳过安装器的大半流程把模板和DLL手动放到它们该待的位置。4. 终极修复手动部署模板和注册向导组件4.1 先从安装目录里把模板文件抠出来如果前面三步全试过还不行或者安装包压根没法正常跑完那就走最终路线——手动把Wizard的文件部署到VS里。首先要确认Wizard安装包是否已经把文件释放到了某个目录。常见的安装路径是C:\Program Files (x86)\Autodesk\ObjectARX 2015 Wizard但也有可能装到了别的盘。找不到的话在文件资源管理器里搜索ObjectARX关键词或者在C:\Program Files (x86)\Autodesk\下翻一翻。进入安装目录后通常会看到一个Templates文件夹里面是若干.zip文件文件名形如ObjectARX2015Project.zip、ObjectARX2015DbxProject.zip。这就是VS新建项目时要显示出来的模板。如果安装目录里没有Templates但有原始的.msi安装包可以用管理员命令行强制解包msiexec /a ObjectARX2015.msi /qb TARGETDIRD:\arx_wizard/a是管理安装模式会把MSI内部的文件全部提取到指定目录不需要真的跑安装流程也就绕过了权限和安全拦截非常适合这种老安装包在Win10上装不进去的场景。4.2 手动拷贝模板并重建缓存拿到.zip模板文件后下一步是把它们放到VS的模板扫描目录。VS有两套模板目录一套是程序级别的位于VS安装目录下一套是用户级别的位于文档目录下。程序级别的模板目录是所有用户共享的老Wizard的模板必须放到这里才符合它的设计预期。VS2013的具体路径是C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ProjectTemplates\VCVS2012则把12.0换成11.0。在这个目录下你可以看到原有的VC模板也都是一堆.zip文件。直接把Wizard的模板zip拷进去注意不要解压VS的模板引擎能直接识别zip包。拷完后要用管理员命令提示符重新执行一遍devenv.exe /installvstemplates这一步会扫描模板目录并把新增的zip注册到用户缓存中。如果之前删过缓存这时正好一并重建。跑完再打开VS新建项目下应该能看到ObjectARX的模板了。这里有个很坑的细节有时候/installvstemplates会报错说没有权限访问某些目录别慌确认命令提示符是管理员并且VS没有在运行再执行一次基本就正常了。4.3 用regsvr32补注册向导DLL模板文件就位只是第一步因为ObjectARX 2015 Wizard真正干活的不是模板而是那个向导DLL。如果DLL没被注册你点新建项目时虽然能看到模板图标但下一步会直接报错。在Wizard安装目录里找名字里带Wizard的DLL文件常见的是Wizard2015.dll或ObjectARXWiz2015.dll。用管理员命令提示符执行regsvr32 C:\Program Files (x86)\Autodesk\ObjectARX 2015 Wizard\Wizard2015.dll注册成功后系统会弹一个DllRegisterServer succeeded的提示。如果没有这个提示而是报找不到入口点那说明DLL可能因为缺运行库没有正确加载去装一下Visual C 2013 Redistributable x86/x64再重试。注册完之后可以顺带检查一下注册表里有没有对应的组件信息。打开regedit在HKEY_CURRENT_USER\Software\Classes\CLSID下搜索DLL文件名能搜到就说明注册成功了。这一步不是必须的但能帮你确认是不是装到了32位或64位错位的问题。4.4 在VS里验证创建第一个ObjectARX项目手动部署完模板和DLL后重新打开VS新建项目找到ObjectARX 2015 Project。点击后会进入向导界面第一步会让你填项目名和路径第二步会让你指定ObjectARX 2015 SDK的路径。这里提醒一下向导默认的SDK路径很可能指向一个不存在的目录你需要手动选择到SDK里的inc的上一级目录也就是包含inc、lib、docs的那一层。指定完路径后向导会生成一个完整的ObjectARX项目里面包含arx入口、命令注册代码以及链接器依赖。如果一切正常直接F5编译就能得到一个可以ARXLOAD到AutoCAD 2015里的arx文件。如果点击确定后仍然报错常见的原因有几种。一种是项目名用了中文导致生成的临时文件路径乱码改英文项目名就好。另一种是SDK路径里的inc目录包含了中文或者空格Win10下比较少见但存在尽量把SDK放到纯英文路径下。4.5 别忘了补VC运行库Win10上最容易忽略的周边坑这一步看似跟Wizard无关但实际影响着整个向导能否运行。ObjectARX 2015 Wizard的向导DLL是用VS2013的工具链编译的运行时依赖msvcr120.dll和msvcp120.dll。如果用Win10全新安装的机器未必预装了这些旧的运行库组件。缺失时向导DLL可能加载失败表现得就像Wizard根本没装一样或者点模板后闪退。解决办法是去微软官网下载Visual Studio 2013 的 Visual C 可再发行软件包装x86和x64两个版本。很多老软件都是32位组件所以即使你的系统是64位的最好也把x86版本装上。装完后再重新执行regsvr32向导DLL大概率就能正常加载了。5. 如果实在修不好绕开Wizard的备选路线5.1 手搓ObjectARX工程的最小配置坦白说如果前四章的方法全部试过Wizard还是不能正常创建项目我不会建议你再无限重装——尤其是当你的环境是Win10 VS2013 企业安全策略这种组合时继续跟安装器搏斗的边际收益已经很低了。此时最靠谱的方案是绕开Wizard手动创建ObjectARX工程。手搓一个能跑起来的arx工程实际只需要四样东西正确的入口函数、SDK头文件路径、SDK库文件路径、以及一个导出acrxEntryPoint的def文件。入口函数大概长这样// MyArx.cpp #include acedCmdNm.h #include rxregsvc.h #include acuitool.h extern C AcRx::AppRetCode acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt) { switch (msg) { case AcRx::kInitAppMsg: acrxDynamicLinker-unlockApplication(pkt); acrxRegisterAppMDIAware(pkt); acedRegCmds-addCommand(_T(MYARX), _T(HELLO), _T(HELLO), ACRX_CMD_TRANSPARENT, nullptr); break; case AcRx::kUnloadAppMsg: acedRegCmds-removeGroup(_T(MYARX)); break; default: break; } return AcRx::kRetOK; }def文件LIBRARY MyArx EXPORTS acrxEntryPoint 1在VS2013里新建一个空白的Win32项目DLL类型然后把上面代码和def文件添加进去。在项目属性里设置C/C → 常规 → 附加包含目录指向SDK的inc目录。链接器 → 常规 → 附加库目录指向SDK的lib\win64或lib\win32目录取决于目标平台。链接器 → 输入 → 附加依赖项添加rxapi.lib、acdb19.lib、acge19.lib、acutil19.lib等核心库。不同版本的SDK库名里的数字对应CAD内部版本2015是19别写成别的版本号。编译通过后在AutoCAD里用APPLOAD加载生成的arx文件输入HELLO命令如果能正常响应就说明手搓的方案完全可行。这个方法的好处是不依赖Wizard的安装状态环境再烂都能用坏处是你需要自己维护工程配置每次复制到新的开发机时Setpath都得多花几分钟。但只要配置过一次后面新增功能就跟普通C开发没有区别了。5.2 用AutoCAD .NET API绕开C向导如果项目对性能要求不极端或者说你用C开发时并没有重度使用Arx底层协议那其实还有一个更省心的选项直接用AutoCAD .NET API开发。.NET API不需要装任何Wizard也不用配置复杂的C链接库。在VS2013里新建一个普通的类库项目引用AcDbMgd.dll、AcMgd.dll、AcCoreMgd.dll三个程序集然后写一个继承IExtensionApplication的类在Initialize方法里用Autodesk.AutoCAD.ApplicationServices命名空间的命令注册API注册命令。编译出的DLL直接就能在AutoCAD里NETLOAD加载。它的门槛比C低很多出错率也小得多而且调试体验比纯C好因为可以直接抛异常看堆栈。缺点是和ObjectARX原生API相比某些底层操作比如自定义实体的深度定制、数据库引擎扩展会受限另外打包分发时要注意目标机器上的.NET Framework版本。但考虑到老Wizard在Win10下各种抽风.NET API在很多场景下确实是更理性的选择。5.3 升级SDK和VS从根源上回避兼容性最后还要说一个比较现实的思路如果项目没有被AutoCAD 2015版本死死绑住那真的不必在ObjectARX 2015这个老掉牙的组合上死磕。ObjectARX 2015的继任版本从2018版开始对现代Windows的支持就完善了很多Wizard的安装方式也改用了VSIX扩展机制不再依赖老式MSI注册安装失败率大幅下降。配合VS2017或者VS2019在Win10上基本能做到装完即用。如果甲方愿意用AutoCAD 2018以上的版本我会建议直接升级SDK把开发机的系统升级成本一次到位。当然升级SDK意味着库名、头文件路径、部分API调用都会变要从头做一次编译适配。但考虑到老SDK在Win10上的维护代价——每次换机器都要跟Wizard折腾一回——这笔升级时间花得值。特别是现在的AutoCAD版本跟着订阅走很多客户早就用上了新版被锁死在2015上的场景只会越来越少。5.4 关于老版本环境的个人实践建议说点我自己的体会。我现在手头还有一两个项目因为客户原因锁死在AutoCAD 2015上所以避不开ObjectARX 2015 Wizard。我现在的做法是保留一台装了Win7 SP1和VS2013的虚拟机专门用来生成向导项目和做首次编译验证。开发机上用Win10 VS2013 手写的工程文件做日常编码写完代码以后同步到虚拟机里去编一遍确认无误再打包发给客户。这样虽然麻烦了一点但胜在稳定。老Wizard在Win7虚拟机里几乎不会出问题手写工程文件在开发机上也已经跑通了两条路互不干扰。真要在Win10上彻底治好Wizard前面第四章的手动部署方案是目前我验证过最有效的路径成功率远高于网上那些改注册表、改兼容性设置的偏方。如果你只有一台机器没有条件开虚拟机那建议至少把第四章的整个流程走完并把SDK、Wizard安装包、VC运行库、手写工程模板都备齐一份。这样就算哪天系统抽风也能在半小时内把环境重建起来不至于卡在创建项目这一步进退两难。
返回列表