2011-02-14 86 views
0

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

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

有人可以帮助获得一个开始抓住这个莫名其妙的问题?

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

+0

对于无法创建对象的时间,您有更具体的错误吗?然后下一步将是注册表;去找到MSXML2.DOMDocument类并按照它的实现类。这应该显示哪个.dll文件正在用于您正在使用的对象。当你注册一个COM对象(如MSXML)时,它只需将信息写入注册表。使用'regsvr32 MSXML2.DLL'命令,您将重置注册表值以使用您刚刚“注册”的.dll文件。您是否安装了“regsvr32”交付的msxml2.dll(s)? – 2011-02-14 14:26:08

+0

@ Marvin Smit:我们使用Inno Setup,并且它已经注销并重新注册了。dll的好几年了。 – Dabblernl 2011-02-14 14:47:27

回答

1

现在很多库都是由系统管理的。因为“真实”的库存在SxS缓存中,所以将东西转储到System32中只能让你感到满意。

这就是为什么您要为他们使用批准的部署技术的原因之一,而对于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,这是特定于子版本的(并非所有接口都是从服务包到服务包的二进制兼容)。

+0

我们早期绑定到msxml2,但我编译了引用4的版本。我将尝试去6. – Dabblernl 2011-02-14 18:04:44