已安全化的ActiveX控件卸载时出现"DllUnregisterServer函数出错,错误代码:0x80070002"问题解决

 

情况一:当该控件未注册或者已经卸载时,你尝试卸载便会出现这个错误。
 
情况二:

关于ActiveX控件实现安全的初始化和脚本请查看这篇博文

当已经使用命令行卸载已经实现安全的初始化和脚本的ActiveX控件时会看到出现“DllUnregisterServer函数出错,错误代码:0x80070002”的提示。

按照开头的那篇博文,在DllUnregisterServer函数中实现如下:

STDAPI DllUnregisterServer(void)

{

AFX_MANAGE_STATE(_afxModuleAddrThis);

if (!AfxOleUnregisterTypeLib(_tlid, _wVerMajor, _wVerMinor))

return ResultFromScode(SELFREG_E_TYPELIB);

if (!COleObjectFactoryEx::UpdateRegistryAll(FALSE))

return ResultFromScode(SELFREG_E_CLASS);

// 删除控件初始化安全入口.

HRESULT hr=UnRegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForInitializing);

if (FAILED(hr))

return hr;

// 删除控件脚本安全入口

hr=UnRegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForScripting);

if (FAILED(hr))

return hr;

return NOERROR;

}

这里犯了一个逻辑错误,错误的表现是:当用regsvr32 /u 进行反注册时,将弹出错误提示:调用某某ocx文件的DllUnregisterServer函数出错,错误代码:0x80070002,用Error lookup工具查看,错误描述为:系统找不到指定的文件。

看看注册表,其实反注册是成功的,那么实际上应该是先反注册安全组件成功之后又做了检测的结果,安全组件其实是在注册表中添加一些注册,表明自己安全罢了,关于安全性的注册是依赖与原组件的,所以上面函数反注册的顺序不正确,应该先反注册掉安全组件,再反注册掉原组件,实际上知识将代码的先后执行顺序做了对调,修改后的代码如下:

  

STDAPI DllUnregisterServer(void)

{

AFX_MANAGE_STATE(_afxModuleAddrThis);

// 删除控件初始化安全入口.

HRESULT hr=UnRegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForInitializing);

if (FAILED(hr))

return hr;

// 删除控件脚本安全入口

hr=UnRegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForScripting);

if (FAILED(hr))

return hr;

if (!AfxOleUnregisterTypeLib(_tlid, _wVerMajor, _wVerMinor))

return ResultFromScode(SELFREG_E_TYPELIB);

if (!COleObjectFactoryEx::UpdateRegistryAll(FALSE))

return ResultFromScode(SELFREG_E_CLASS);

return NOERROR;

}

这样同样问题便不会出现了。

最新文章

  1. jquery-leonaScroll-1.3-自定义竖向自适应滚动条插件
  2. JavaScript通过元素id和name直接获取元素的方法
  3. block的常见用法
  4. Ubuntu 安装mysql和简单操作
  5. 开关电源-BUCK
  6. 3.12----对potplayer的使用评价
  7. jquery zclip 复制黏贴功能不能实现
  8. CSS3之动画相关
  9. 使用js对form表单base64加密
  10. 测试一波SpringBoot的HTTP吞吐量
  11. Buffer --缓冲器
  12. CSS3-1
  13. web前端(9)—— CSS属性
  14. 如何用css实现"等高布局"。
  15. CentOS6.8下安装Nginx-1.9.15
  16. editcap的使用
  17. 2018.07.25 bzoj2125: 最短路(圆方树+倍增)
  18. 【LeetCode题解】160_相交链表
  19. 【黑金ZYNQ7000系列原创视频教程】06.ZYNQ来自FPGA的中断——按键中断实验
  20. C#之用XmlWriter保存XML数据

热门文章

  1. 【旧文章搬运】更正一个枚举PspCidTable时的错误
  2. 更新gitignore
  3. 前端笔记之React(二)组件内部State&React实战&表单元素的受控
  4. 黑客攻防技术宝典web实战篇:Web 应用程序技术习题
  5. LuoguP3121 [USACO15FEB]审查(黄金)Censoring (Gold)【Hash做法】By cellur925
  6. C#中自定义类数组和结构数组的使用
  7. 4-redis数据过期策略
  8. Hibernate Could not obtain transaction-synchronized Session for current thread问题处理
  9. jmeter(二十二)jmeter测试Java请求
  10. JAVA常用知识总结(六)——Mybatis