ActiveX Cab Files codebase #Version没有正确更新CAB

时间:2009-03-12 14:20:21

标签: .net asp.net activex

好的我作为最后的手段来到这里希望有人知道答案,在新闻组中没有答案,我已经做了我知道怎么做的一切,除了我想要避免的严重黑客解决方案

情况如下:

我有一个暴露COM的.NET类库。我将其包装到CAB文件中,并使用Object标签将其嵌入页面中。在CODEBASE属性上,我将其指向cab文件并添加如此版本“CODEBASE =”cabfiles \ mycab.cab#version = 30.0.0.1“

问题:

因为这是一个暴露给COM的.NET dll,它正在使用inprocServer32注册表项注册它,该注册表项指向mscoree.dll,其版本为2.0.50727,这是有道理的,因为.NET com对象在该进程下运行,和2.0.50727是该DLL的版本。但这打破了OBJECT标记上CODEBASE属性的version属性。

我设置的任何版本大于2.0.50727将下载重新安装cab文件的内容。

我已尝试更改注册表设置和值以及大量内容,但无法找到解决方案。

所以有人知道这个问题的解决方案吗?

2 个答案:

答案 0 :(得分:4)

安装cab后,需要更新注册表项:

  

HKCR / CLSID / {GUID} / InstalledVersion /(默认)

  • {GUID}是对象的类ID
  • 该值是您的Html元素中指定的字符串(上面的“30.0.0.1”)。

Windows在使用dll之前检​​查多个注册表位置(在您的情况下是mscoree.dll)。上面的位置是为每个系统安装一些东西(HKCR),你也可以按用户安装它。选择以下位置之一来放置您的版本字符串。按列出的顺序检查位置。

  1. HKCU / CLSID / {GUID} / AvailableVersion /(默认)
  2. HKCR / CLSID / {GUID} / AvailableVersion /(默认)
  3. HKCU / CLSID / {GUID} / InstalledVersion /(默认)
  4. HKCR / CLSID / {GUID} / InstalledVersion /(默认)
  5. 你的集会
  6. 如果regasm为你处理这件事会很好,但事实并非如此。您需要在安装程序中手动设置它。

答案 1 :(得分:2)

此外,您需要使用逗号作为版本号:

“CODEBASE =” cabfiles \ mycab.cab#版本= 30,0,0,1"

相关问题