本文是去年《ArcGis Classic COM Add-Ins插件开发的一般流程 C#》一文(以下称“开发流程”)的后续。“开发流程”中写到会有“安装与卸载”系列的文章,今天把它补上。
想起这个事情来缘由是一个小朋友问我怎么卸载插件,他给我发的第一条信息是“怎么卸载?”怎么尼妹啊,天知道你说的啥,于是我让他看上面的文章自己研究去了。
一、安装
1、常用方法Add from file
在ArcMap中【自定义Customize】—【自定义模式Customize mode】—【自文件 Add from file】,添加.tlb文件。
要清楚.tlb是依赖.dll而存在的,不要删除、移动或者改名.dll。
“开发流程”中写到“可以选择是否生成.tlb(Type Library)文件,可以通过在ArcGis的桌面程序中加载.tlb文件实现插件的加载”,也写到“不过这种加载方式有时会存在问题”。
这种方法适合加载一些commands, tools, and toolbars的组件,但是对于DockableWindow等的组件会有注册问题,也就是说这样安装插件,DockableWindow等的工具是不能用的。
具体的,官方帮助里是这样写的:
Use the Customize dialog box in ArcGIS applications to add commands, tools, and toolbars. Click the Add from File button on this dialog box to browse for the type library (.tlb) file created for your customization, then open it, which allows the ArcGIS Framework to add selected classes in the type library to the applicable component category.
This method is beneficial if you want to use an existing compiled component that contains command items (commands, tools, and toolbars) but does not have automatic registration code.
For .NET components, select the type library instead of the .dll file.
有兴趣扒洋文的,链接在这里→Registering classes in COM component categories
2、ESRIRegAsm.exe
自10.0开始ESri改变了以往的把COM组件注册信息写进注册表的注册方法,采用了自家的ESRIRegAsm.exe对dll进行注册,使用一个xml配置文件(.ecfg)保存注册信息。相关信息可以去翻看“开发流程”。ESRIRegAsm.exe在~:\Program Files\Common Files\ArcGIS\bin路径下。
注册成功会生成配置文件.ecfg,在~:\Program Files(Program Files x86)\Common Files\ArcGIS\Desktop10.0\Configuration\CATID路径下。
2.1手动
在需要安装注册的.dll上右键使用ESRIRegAsm.exe打开,选择要安装到的对象→注册就可以了,这个“对象”可以是Desktop,也可以是 Engine,它是在.dll的代码里写死的,比如下图的工具只能注册到desktop。相关信息移步阅读“开发流程”。
2.2自动
这种安装方式可以写一个批处理文件搞定,复制下面代码放到文本文档,把set b=%a%YTools.dll 的YTools.dll 改成你要安装的插件.dll名,保存,改扩展名为.bat,与.dll放到同一路径下,双击实现安装注册。
@echo off echo 》安装插件到ArcMap…………………… set a=%~dp0 echo 》当前路径: %a% set b=%a%YTools.dll echo 》dll路径:%b% if "%PROCESSOR_ARCHITECTURE%"=="x86" goto x86 if "%PROCESSOR_ARCHITECTURE%"=="AMD64" goto x64 :x64 echo 》当前系统位数:64位 cmd /c"cd/d C:\Program Files (x86)\Common Files\ArcGIS\bin&&ESRIRegAsm.exe /p:desktop "%b%"" exit :x86 echo 》当前系统位数:32位 cmd /c"cd/d C:\Program Files\Common Files\ArcGIS\bin&&ESRIRegAsm.exe /p:desktop "%b%"" exit pause
批处理代码很简单,看不懂的就……放弃吧!
链接还是扔在这里,喜欢扒 洋文的自己戳→ESRIRegAsm utility
可以借由这种方式发布插件,实现用户一键注册。
二、卸载
在ArcMap顶部功能区右键勾掉,在“自定义”窗口勾掉,都不能卸载插件的,它只是不显示了而已。
1、在ArcMap勾掉插件项,然后删掉配置文件.ecfg
.ecfg在~:\Program Files\Common Files\ArcGIS\Desktop10.0\Configuration\CATID路径下,是{GUID}插件dll名.ecfg命名样式的一个文件,如{7a0b95da-488a-4dca-98fe-968ed7a12730}_YTools.ecfg
2、ESRIRegAsm.exe
2.1手动
在插件dll上右键使用ESRIRegAsm.exe打开,反注册。
2.2自动
还是用那个批处理代码,与安装代码的区别只在一个参数,有兴趣仔细瞅的还建议去看洋文。自己戳→ESRIRegAsm utility
@echo off echo 》从ArcMap卸载本插件…………………… set a=%~dp0 echo 》当前路径: %a% set b=%a%YTools.dll echo 》dll路径:%b% if "%PROCESSOR_ARCHITECTURE%"=="x86" goto x86 if "%PROCESSOR_ARCHITECTURE%"=="AMD64" goto x64 :x64 echo 》系统位数:64位 cmd /c"cd/d C:\Program Files (x86)\Common Files\ArcGIS\bin&&ESRIRegAsm.exe /p:desktop /u "%b%"" exit :x86 echo 》系统位数:32位 cmd /c"cd/d C:\Program Files\Common Files\ArcGIS\bin&&ESRIRegAsm.exe /p:desktop /u "%b%"" exit pause