网上有不少介绍了.NET编写ActiveX的文章,但是似乎没有提到过.NET ActiveX有一个无法通过网页自动升级的缺陷。
普通的ActiveX可以通过在网页上声明更新版本号来自动升级,无需客户端进行人工操作。例如:
_<OBJECT CLASSID="clsid:F2E88901-1CF4-11d3-8DB7-00C04FB6E8F6" CODEBASE="http://example.microsoft.com/myComponent.cab#Version=1,0,2,0"> _
但是.NET ActiveX此路不通。原因如下:
.NET ActiveX不可能脱离.NET运行时,因此非.NET程序在调用 .NET ActiveX 时,需要有一个中间代理"c:\windows\system32\mscoree.dll"。.NET ActiveX 在注册时实际上注册的就是这个dll,然后将自身的描述信息也存放在注册表中。
在被调用时,先启动的是mscoree.dll,它会准备好.NET 运行时,读取相应的注册表信息,加载运行.NET ActiveX。
因此本地看到的已安装的.NET ActiveX的版本号,其实是mscoree.dll的版本号,与.NET ActiveX 的版本号无关,也不能正确的和网页上的版本号进行对比。这一缺陷,是技术选型时值得衡量的一个因素。