msxml .dll的奇怪行为

时间:2011-02-14 14:18:31

标签: vb6 msxml dll

当程序试图实例化MSXML2.DOMDocument时,突然有些客户遇到ActiveX组件无法创建对象错误。我们在这里谈论的是一个VB6应用程序,它是在一台计算机上编写的,它设置了对msxml2.dll的引用而没有其他的xml-dll。当我们发布部署时,我们每次都会部署msxml2.dll msxml2a.dll和msxml2r.dll,并且从未遇到任何问题。

不是这个时候!就好像Windows环境本身已经改变并拒绝取消注册/重新注册过程。 无论我做什么,我都无法让客户端计算机成功实例化MSXML2.DOMDocument。 让事情变得更奇怪:当我从system32文件夹重命名/取消注册/删除所有msxml2 *文件时,没有遇到问题的客户端会继续运行,因此它们似乎不需要.dll!通常,此客户端将安装msxml3,4和6的混合。我搜索了硬盘驱动器,没有其他的msxml2拷贝潜伏。

有人可以帮忙开始抓住这个令人困惑的问题吗?

编辑:只是一个简单的设置doc = new MSXML2.DOMDocument足以导致错误。

2 个答案:

答案 0 :(得分:1)

现在有很多库是由系统管理的。将内容转储到System32只能让你到目前为止,因为“真正的”库存在于SxS Cache中。

这就是为什么要对它们使用经过批准的部署技术的原因之一,对于MSXML,这有点复杂,除非您只是使用Microsoft提供的规定的MSI包(或EXE中包含的那些包)。 MSXML 4也以MSM和CAB格式提供,用于每次更新,这更多地与仅支持MSXML 4的“SxS安装”有关(在MSXML 6中作为一个坏主意被删除)。

好消息是除了Server 2003之外的所有受支持的操作系统都已经包含了MSXML 6,因此无需部署就可以免费获得目标:

MSXML6 is now in-band, MSI setup headaches should now (almost) be gone..

MSXML 3在大多数Windows版本上都可以进一步使用,并且可以部署回至少Win98:Microsoft XML Parser (MSXML) 3.0

安装和组件注册和服务没有像您现在认为的那样有效。将应用程序打包为MSI包而不是使用旧的脚本化安装工具更安全。不要尝试部署像MDAC和MSXML这样的复杂软件包。

您在早期绑定哪个特定的MSXML版本?请记住,如果您使用MSXML 4,则这是特定于子版本的(并非所有接口都是从Service Pack到Service Pack的二进制兼容)。

答案 1 :(得分:1)

总是使用依赖于版本的ProgID而不是版本独立的ProgID是个好主意。例如,我建议你改用Msxml2.DOMDocument.6.0。有关详细信息,请参阅Using the right version of MSXML in Internet Explorer