周报_2012第17周(2012/04/22-2012/04/28)

本文探讨了在升级shell扩展及COM组件库时遇到的问题,包括如何通过更新GUID来避免旧版本DLL导致的崩溃,以及确保右键菜单扩展正常显示的方法。

2012.04.28

复杂问题研究:升级shell扩展com库

explorer根据guid区分不同的com库

explorer不重新启动则始终在其内存中驻留旧的com库程序

rgs注册表项为com库的调用方入口

explorer使用相同的旧的guid(新升级版本的rgs注册表项)调用其内存中驻留的旧com库,崩溃的是旧dll库,与新dll库无关,所以新增调用接口无法兼容预防旧程序崩溃。

explorer使用新guid与其内存中驻留的旧com库不匹配,不能调用程序,所以右键菜单扩展显示为空。

所以新增调用入口时防止旧com库崩溃的方法是[升级guid],结果为不显示右键菜单的shell扩展,explorer重新启动后将提升dll版本号(即加载新的guid库)加载新的com库程序。(应尽可能的在最初设计时完善调用入口 - 注册表项 ShellEx\ContextMenuHandlers)

 

覆盖原dll文件位置安装时(删除原dll并在相同位置粘贴新dll),explorer同时保存2个版本dll(包含已删除的原有dll),explorer使用新升级guid和新dll库匹配,但是explorer使用未提升的旧的dll版本号,不能加载。

删除原dll文件在新位置安装时,explorer使用新升级guid和新dll库匹配,并提升新dll版本号,正确加载shell扩展库。

转载于:https://www.cnblogs.com/DancingFish/archive/2012/04/28/2475806.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值