2

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

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

このアプリケーションは、XPおよびWindows Server 2003で正常に動作しました。WindowsServer2008では0x800029C4A "Error loading type library/DLL"、タイプライブラリの読み込み中にエラー()が発生しました。winhttpを再登録すると、問題が修正されます。問題は、なぜですか?

何度も行き詰まった後、レジストリで次のことを見つけました。

インストールされているWindows2008Server 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、Server2003は私のために機能するSxSインストールを使用しました>0

ですから、これはバグだと思います。Microsoftにバグを報告しました(または、少なくともconnect.microsoft.comという沼地からできる限りのことです)。しかし、ここでは取得できない部分があります。WindowsServer以降2008とVistaは非常に似ており、この問題はVistaにも存在する可能性があります。WinHttpRequestは、一般的に使用されるオブジェクトである必要があります。大衆は悲鳴を上げているはずですが、グーグルを何度も繰り返した後、人々がこの問題に遭遇したスレッドは1つだけでした。

winhttpを再登録すると問題が修正されるので、それを実行しています。これを投稿するのは、a)この一般的に使用されるコンポーネントを再登録することがベストプラクティスであるとは信じられないためです。b)バグである場合は、他の誰かに役立つ可能性があります。

-ロブ

4

1 に答える 1

1

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

于 2009-12-14T13:06:23.133 に答える