COM注册注销

参考资料路径:https://knowledge.ni.com/KnowledgeArticleDetails?id=kA00Z0000019MOqSAM&l=zh-CN

一、 进程内和进程外COM注册注销命令
①进程内COM注册
regsvr32+空格+dll路径+enter

②进程外COM注册
exe路径+空格+regserver+enter

③进程内COM注销
regsvr32 /u+空格+dll路径+enter

④进程外COM注销
exe路径+空格+unregserver+enter

⑤TLB注册
Regtlib.exe + 空格 + tlb路径

regtlibv12.exe+ 空格 + tlb路径
测试并未成功,初步怀疑是Windown版本问题,后面再补充原因

Regasm.exe+ 空格 + tlb路径
测试并未成功,初步怀疑是Windown版本问题,后面再补充原因

⑹TLB注销
暂未找到方法,后面补充

二、 COM注册
以下以进程内COM为例,列举不同注册方式的写法。
1生成时注册
①设置COM组件的【项目属性-【链接器】-【常规】-【注册输出】,设置为true
在这里插入图片描述
②设置COM组件的【项目属性】-【自定义生成步骤】中的命令行、说明、输出
命令行:regsvr32 /s /c “ ( T a r g e t P a t h ) " e c h o r e g s v r 32 e x e c . t i m e > " (TargetPath)" echo regsvr32 exec. time > " (OutDir)\regsvr32.trg”
说明:Performing registration
输出:$(OutDir)\regsvr32.trg
在这里插入图片描述
注意事项:1)命令行分两行写
2)各参数含义
2手动注册
①以管理员方式打开【命令提示符】
②分析待注册的dll是32位还是64位
如果是32位的dll,直接使用syswow64中的regsvr32+空格+dll路径+enter,其中dll路径中含有空格时,需要用双引号引起来
在这里插入图片描述
如果是64位的dll,需要采用system32中的regsvr32+空格+dll路径+enter,其中dll路径中含有空格时,需要用双引号引起来
在这里插入图片描述
3脚本注册
①注册当前文件夹中的所有dll和ocx:
新建文件:RegisterDllAndOcx.bat
@echo off
echo
for %%i in (*.dll *.ocx) do (
echo %%i register is starting…
C:\Windows\System32\regsvr32.exe %%i /s
echo %%i register is finished…
)
Pause

②注册当前文件夹中的所有进程外com,EXE文件:
新建文件:Registerexe.bat
echo
for %%i in (*.exe) do (
echo %%i register is starting…
%%i /regserver
echo %%i register is finished…
)
Pause
③根据指定的注册顺序,注册当前文件夹中的dll

④自动注册当前目录下所有tlb文件
新建文件:Registertlb.bat
echo
for %%i in (*.tlb) do (
echo %%i register is starting…
C:\Windows\regtlib.exe %%i
echo %%i register is finished…
)
Pause

备注:Bat文件中当需要拼接路径时:
@echo off
echo 当前盘符:%~d0
echo 当前盘符和路径:%~dp0
echo 当前盘符和路径的短文件名格式:%~sdp0
echo 当前批处理全路径:%~f0
echo 当前CMD默认目录:%cd%
pause

@echo off
set b=%~dp0
echo:"%b%GeoTopologyPretreatmentPS.dll" register is starting…
C:\Windows\System32\regsvr32.exe “%b%GeoTopologyPretreatmentPS.dll” /s
echo:"%b%GeoTopologyPretreatmentPS.dll" register is finished…
echo:"%b%GeoTopologyPretreatment.exe" register is starting…
“%b%GeoTopologyPretreatment.exe” /regserver
echo:"%b%GeoTopologyPretreatment.exe" register is finished…

三、 注
册失败如何分析
1、 分析是否缺少依赖环境
1) 使用depends工具查看依赖环境,注意32位com组件要使用的32位的depends工具,64位com组件要使用的64位的depends工具
2) 分析依赖环境时,首先分析直接依赖的dll的缺失,再分析开发环境的缺失(运行时、第三方库)、最后分析系统环境的dll的缺失
3) 分析依赖环境中的,延迟加载文件的缺失情况、位数是否相同(即32位依赖的的dll都要是32位的,64位依赖的的dll都要是64位的)
2、 权限问题
由于注册是需要向注册表中写注册信息的,故需要有管理员权限。
如果是在编译输出时注册,需要编译器以管理员方式运行
如果是手动在cmd里面注册,需要以管理员的方式打开【命令提示符】
如果是执行注册脚本,需要以管理员方式运行BAT文件

猜你喜欢

转载自blog.csdn.net/qq_39116201/article/details/83714615