C#开发Activex控件–升级

本文为控件开发系列文章的最后一部分,之前的部分待本人慢慢补上,文中一些方法和经验参考了众多的网上文章,本文也尽可能的列举出来,同时也向这些作者表示感谢。

控件在客户机器上安装使用之后,面临的一个非常重要的问题就是升级。在对控件进行升级时,有四个版本必须注意:
(1)    Cab的版本(即html里codebase的版本)
(2)    注册表版本
(3)    安装项目版本(MSI版本)
(4)    控件版本(Activex项目版本)

Cab版本:
Cab版本在网页中的codebase中进行标识,如下面的代码中标识的cab版本是1.0.5,注意版本的分隔符为“,”(逗号),而不是“.”(句号)。
<object id="printer" classid="clsid:9771B223-6188-4849-B292-C7D9D8173E59" codebase=" MyCtrl.CAB#version=1,0,5" width="100%" height="100%">
</object>

注册表版本:
Cab包安装时写到客户机器注册表中的版本标识,一般写在注册表中的下列位置:
HKEY_CLASSES_ROOT /CLSID/{GUID}/InstalledVersion

HKEY_CURRENT_USER /Software/Classes/{GUID}/InstalledVersion/(Default)
注册表版本需要在Activex安装项目中进行设置,如果没有设置的话,系统将会默认使用.net framework的版本作为注册表版本。
客户机器打开网页时,将cab包的版本与注册表版本进行比较,如果发现cab包的版本比注册表版本新,将会下载并执行cab程序的安装。
如果安装程序不写注册表或者注册表项中的版本没有变化,而只是修改了网页中的cab版本,则每次打开网页时,客户机器都会执行一次安装。

安装项目版本
这个版本需要比客户机器上的安装版本新,否则在执行安装时会失败,另外需要把移出上一版本这一属性设置为true。

控件版本
这个版本如果比客户机器上的控件版本旧,在执行安装时将不予替换,只有当控件版本比客户机器上版本新的时候新的控件才会替换客户机器上的控件。


要实现C#控件的升级,可按照以下步骤进行:
(1)    设定控件版本
控件项目—右键—属性—应用程序—程序集信息—程序集版本/文件版本
(2)    设定注册表版本
安装项目—右键—视图—注册表—HKEY_CLASSES_ROOT
增加或修改:CLSID/{GUID}/InstalledVersion键,在该键下增加字符串值为版本号,如:

注意:1) GUID两边应该有大括号;2)“默认值”设置为空即可出现,而不是手工输入“默认值”这三个中文字符。
(3)    设定安装项目版本
安装项目—属性(注意通过右键出不来,可以先点击任意一文件–右键–属性—然后切换到安装项目)–version/RemovePreviousVersions(true)。
(4)    设定CAB包版本
<object id="printer" classid="clsid:9771B223-6188-4849-B292-C7D9D8173E59" codebase="MyCtrl.CAB#version=1,0,5" width="100%" height="100%">
</object>

参考文档:
(1)    http://blog.csdn.net/luyifeiniu/article/details/6078482
(2)    http://social.msdn.microsoft.com/Forums/en-US/ieextensiondevelopment/thread/48335861-2434-4058-9809-186a0bd9e320/
(3)    http://stackoverflow.com/questions/1506858/how-to-get-com-server-for-excel-written-in-vb-net-installed-and-registered-in-au

转载请注明出处:http://www.cnblogs.com/yuanyee

Leave a Reply