﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-我的学习园地-随笔分类-Win32</title><link>http://www.cnitblog.com/sonery/category/8914.html</link><description>昨夜西风凋碧树,独上高楼,望尽天涯路。</description><language>zh-cn</language><lastBuildDate>Thu, 01 Nov 2012 03:28:04 GMT</lastBuildDate><pubDate>Thu, 01 Nov 2012 03:28:04 GMT</pubDate><ttl>60</ttl><item><title>关于activex在ie中自动升级的一些说明</title><link>http://www.cnitblog.com/sonery/archive/2012/11/01/86722.html</link><dc:creator>冷夜月</dc:creator><author>冷夜月</author><pubDate>Thu, 01 Nov 2012 03:23:00 GMT</pubDate><guid>http://www.cnitblog.com/sonery/archive/2012/11/01/86722.html</guid><wfw:comment>http://www.cnitblog.com/sonery/comments/86722.html</wfw:comment><comments>http://www.cnitblog.com/sonery/archive/2012/11/01/86722.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/sonery/comments/commentRss/86722.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/sonery/services/trackbacks/86722.html</trackback:ping><description><![CDATA[<p>最近帮同事找c#开发activex控件自动升级的方法,得到的一些细节。这些细节其实稍微动点脑子都能想出来的。</p>
<p>ie检测到本机控件的版本比html中codebase中版本低，就会下载codebase中指定的cab来安装。这个过程不管cab里面是什么东西，哪怕里面的版本更低，或者是其他的activex，顺便说下，关于下载跟cab内容无关，我跟某人说了几次，结果都左耳进右耳出。</p>
<p>ie检测本机控件版本的方法是，先读取控件信息（HKEY_CLASSES_ROOT\CLSID\html中指定的clsid\）中InstalledVersion项的默认值，这个值就是本机控件的版本号。如果不存在InstalledVersion项，则读InprocServer32项下默认值对应文件的版本号。</p>
<p>如果懂一点com原理的话，都应该知道InprocServer32项下默认值就是控件对应的文件。该文件中的DllGetClassObject函数是用来创建控件的。而C#开发的控件文件，里面没有导出任何函数，严格的说C#开发的控件并不是真正的com控件，它必须借助net的mscoree.dll来实现com的流程。</p>
<p>所以所有c#开发的控件InprocServer32项下默认值都是mscoree.dll。对于c#开发的控件，如果没有InstalledVersion项，检测本机控件版本的时候都是读的net系统文件mscoree.dll的文件版本。c#开发的控件要实现自动升级就必须写注册表的InstalledVersion项。</p>
<p>另外，补一句日志中的c#开发的控件应该改成.net开发的控件。</p><img src ="http://www.cnitblog.com/sonery/aggbug/86722.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/sonery/" target="_blank">冷夜月</a> 2012-11-01 11:23 <a href="http://www.cnitblog.com/sonery/archive/2012/11/01/86722.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>