基本上我认为这是Windows Server 2008中的一个错误,但我不是一个COM忍者,所以看起来我只是做一些愚蠢的事情。问题是:错误或程序员错误?

我们使用WinHttpRequest(WinHttp的ActiveX组件)来读取http://和https://。我们用来查找组件的ProgID是 WinHttp.WinHttpRequest.5.1

我们的应用程序在XP和Windows Server 2003上运行良好。在Windows Server 2008下,我们会收到加载类型库的错误( 0x800029C4A“Error loading type library / DLL”)。重新注册winhttp解决了这个问题。问题是,为什么?

经过无数次的延迟,我在注册表中找到了以下内容。

安装的Windows 2008 Server SP2:

Name=HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{662901FC-6951-4854-9EB2-D9A2570F2B2E}\5.1\0\win32=%SystemRoot%\system32\winhttp.dll
Type=REG_SZ
Data=%SystemRoot%\system32\winhttp.dll

调用 regsvr32%SystemRoot%\ System32 \ WinHttp.dll 后,此键更改值:

Name=HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{662901FC-6951-4854-9EB2-D9A2570F2B2E}\5.1\0\win32
Type=REG_SZ
Data=C:\Windows\system32\winhttp.dll

我的理解是 REG_EXPAND_SZ 类型的键扩展系统路径,如%SystemRoot%,但 REG_SZ 不会。因此,类型应该是 REG_EXPAND_SZ ,或者应该使用扩展路径。重新注册WinHttp修复了路径,从而修复了WinHttpRequest。 (据我所知,XP使用 C:\ Windows \ System32 \ winhttp.dll 和Server 2003使用了适用于我的SxS安装> 0

所以我认为这是一个错误,我向微软提交了一个错误(或者至少我可以从连接到dot.microsoft.com的沼泽中做到这一点。)但这是我没有得到的部分:由于Windows Server 2008和Vista非常相似,因此Vista中也可能出现此问题。 WinHttpRequest必须是一个常用的对象。群众应该尖叫,但经过大量的谷歌搜索,我发现只有一个人遇到此问题的帖子

重新注册winhttp解决了这个问题,这就是我们正在做的事情。我发布这个是因为a)我无法相信重新注册这个常用组件是最佳做法b)如果它是一个bug,也许这会帮助其他人。

-Rob

有帮助吗?

解决方案

是的,结果证明这是W2K8清单中的一个错误,但不一定是Vista的清单。微软似乎意识到了这个问题,微软应该能够在下一个版本中解决这个问题。当前解决WinHTTP以及ServerXmlHttp的问题是手动注册COM组件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top