WinHttpRequest.5.1を使用する前に、Windows Server 2008にWinHttpを登録する必要は本当にありますか?

StackOverflow https://stackoverflow.com/questions/1639658

質問

基本的には、これはWindows Server 2008のバグだと思いますが、私はCOM忍者ではないので、何かおかしなことをしている可能性もあります。問題は、バグまたはプログラマーのエラーですか?

WinHttpRequest(WinHttpのActiveXコンポーネント)を使用して、http://およびhttps://を読み取ります。コンポーネントの検索に使用しているProgIDは、 WinHttp.WinHttpRequest.5.1 です。

アプリケーションはXPおよびWindows Server 2003で正常に動作しました。WindowsServer 2008では、タイプライブラリをロードする際にエラー( 0x800029C4A"タイプライブラリ/ 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は、一般的に使用されるオブジェクトでなければなりません。大衆は悲鳴を上げるはずですが、多くのグーグル検索の後、この問題が発生したスレッドは1つのみ

winhttpを再登録すると問題が修正されるので、それが私たちのしていることです。これを投稿しているのは、a)このよく使用されるコンポーネントを再登録するのがベストプラクティスだとは信じられないからです。b)バグの場合は、おそらく他の人に役立つでしょう。

-Rob

役に立ちましたか?

解決

はい、これはW2K8のマニフェストのバグですが、必ずしもVistaのマニフェストではありません。 Microsoftはこの問題を認識しているようで、Microsoftは次のリリースでこれを修正できるはずです。 WinHTTPおよびServerXmlHttpの現在の回避策は、COMコンポーネントを手動で登録することです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top