我的学习园地

昨夜西风凋碧树,独上高楼,望尽天涯路。

  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  14 随笔 :: 0 文章 :: 36 评论 :: 0 Trackbacks

2012年11月1日 #

最近帮同事找c#开发activex控件自动升级的方法,得到的一些细节。这些细节其实稍微动点脑子都能想出来的。

ie检测到本机控件的版本比html中codebase中版本低,就会下载codebase中指定的cab来安装。这个过程不管cab里面是什么东西,哪怕里面的版本更低,或者是其他的activex,顺便说下,关于下载跟cab内容无关,我跟某人说了几次,结果都左耳进右耳出。

ie检测本机控件版本的方法是,先读取控件信息(HKEY_CLASSES_ROOT\CLSID\html中指定的clsid\)中InstalledVersion项的默认值,这个值就是本机控件的版本号。如果不存在InstalledVersion项,则读InprocServer32项下默认值对应文件的版本号。

如果懂一点com原理的话,都应该知道InprocServer32项下默认值就是控件对应的文件。该文件中的DllGetClassObject函数是用来创建控件的。而C#开发的控件文件,里面没有导出任何函数,严格的说C#开发的控件并不是真正的com控件,它必须借助net的mscoree.dll来实现com的流程。

所以所有c#开发的控件InprocServer32项下默认值都是mscoree.dll。对于c#开发的控件,如果没有InstalledVersion项,检测本机控件版本的时候都是读的net系统文件mscoree.dll的文件版本。c#开发的控件要实现自动升级就必须写注册表的InstalledVersion项。

另外,补一句日志中的c#开发的控件应该改成.net开发的控件。

posted @ 2012-11-01 11:23 冷夜月 阅读(570) | 评论 (0)编辑 收藏

2008年3月21日 #

     摘要: 用CMarkup类操纵XML  阅读全文
posted @ 2008-03-21 09:36 冷夜月 阅读(17198) | 评论 (5)编辑 收藏

2008年3月3日 #

     摘要: Ajax的一般简单方法  阅读全文
posted @ 2008-03-03 09:54 冷夜月 阅读(353) | 评论 (3)编辑 收藏

2008年2月25日 #

     摘要: 利用C API开发mysql数据库  阅读全文
posted @ 2008-02-25 12:41 冷夜月 阅读(1244) | 评论 (0)编辑 收藏

2008年2月19日 #

     摘要: __cdecl __fastcall与 __stdcall   阅读全文
posted @ 2008-02-19 11:38 冷夜月 阅读(5097) | 评论 (0)编辑 收藏

2008年1月17日 #

     摘要: vs2005下安装boost::regex 及简单的使用  阅读全文
posted @ 2008-01-17 13:07 冷夜月 阅读(3194) | 评论 (0)编辑 收藏

     摘要: c++的经典库  阅读全文
posted @ 2008-01-17 12:27 冷夜月 阅读(2807) | 评论 (54)编辑 收藏

2007年12月15日 #

     摘要: 三种SQL分页法  阅读全文
posted @ 2007-12-15 14:02 冷夜月 阅读(211) | 评论 (0)编辑 收藏

2007年12月8日 #

     摘要: CWnd中PreCreateWindow、PreSubclassWindow、SubclassWindow的区别   阅读全文
posted @ 2007-12-08 10:59 冷夜月 阅读(6071) | 评论 (2)编辑 收藏

2007年12月5日 #

     摘要: 精妙SQL语句   阅读全文
posted @ 2007-12-05 11:53 冷夜月 阅读(207) | 评论 (0)编辑 收藏

仅列出标题  下一页