Действительно ли мне нужно регистрировать WinHTTP на Windows Server 2008 перед использованием WinHttpRequest.5.1?
-
08-07-2019 - |
Вопрос
В принципе, я думаю, что это ошибка в Windows Server 2008, но я не COM ninja, поэтому в равной степени вероятно, что я просто делаю что-то глупое.Вопрос в том,:ошибка или программиста?
Мы используем WinHttpRequest (ActiveX-компонент WinHTTP) для чтения http:// и https://.Прогид, который мы используем для поиска компонента, является 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
Итак, я думаю, что это ошибка, и я отправил сообщение об ошибке в Microsoft (или, по крайней мере, столько, сколько я мог сделать из болота, которое есть connect.microsoft.com.) Но вот часть, которую я не понимаю:поскольку Windows Server 2008 и Vista очень похожи, представляется вероятным, что эта проблема присутствует и в Vista.WinHttpRequest должен быть широко используемым объектом.Массы должны были бы кричать, но после долгих поисков в Google я нашел только один поток, где люди сталкивались с этой проблемой.
Повторная регистрация winhttp устраняет проблему, так что это то, что мы делаем.Я публикую это, потому что а) я просто не могу поверить, что лучше всего перерегистрировать этот часто используемый компонент и б) если это ошибка, возможно, это поможет кому-то еще.
-Роб
Решение
Да, это, оказывается, ошибка в манифесте W2K8, но не обязательно в манифесте для Vista.Microsoft, похоже, знает об этой проблеме, и Microsoft должна быть в состоянии исправить это в следующем выпуске.Текущая работа для WinHTTP, а также ServerXMLHTTP заключается в ручной регистрации COM-компонента.