Fondamentalement, je pense que c'est un bug dans Windows Server 2008, mais je ne suis pas un ninja COM, donc il semble tout aussi probable que je fais juste quelque chose de stupide. La question est: bug ou erreur de programmeur?Ai-je vraiment besoin d'enregistrer WinHttp sur Windows Server 2008 avant d'utiliser WinHttpRequest.5.1?
Nous utilisons WinHttpRequest (le composant ActiveX de WinHttp) pour lire http: // et https: //. Le ProgID que nous utilisons pour rechercher le composant est WinHttp.WinHttpRequest.5.1
.
Notre application a fonctionné correctement sur XP et Windows Server 2003. Sous Windows Server 2008, nous recevrions une erreur (0x800029C4A "Error loading type library/DLL"
) chargeant la bibliothèque de types. La réinscription de winhttp résout le problème. La question est, pourquoi?
Après de nombreux deadends, j'ai trouvé ce qui suit dans le registre.
Windows 2008 Server SP2 comme installé:
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
Après avoir appelé regsvr32 %SystemRoot%\System32\WinHttp.dll
, cette valeur clé change:
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
Ma compréhension est que les clés de type REG_EXPAND_SZ
étendent les chemins de système comme %SystemRoot%
mais REG_SZ
faire ne pas. Le type doit donc être REG_EXPAND_SZ
ou le chemin développé doit être utilisé. Le réenregistrement de WinHttp corrige le chemin et corrige donc WinHttpRequest. (Pour autant que je peux dire, XP utilisé C:\Windows\System32\winhttp.dll
et Server 2003 utilisé une installation SxS qui fonctionne pour moi> 0
Donc, je pense que c'est un bug, et j'ai déposé un bogue avec Microsoft (ou au moins autant que Je pourrais faire à partir du marais qui est connect.microsoft.com.) Mais voici la partie que je ne comprends pas: depuis Windows Server 2008 et Vista sont très similaires, il semble probable que ce problème est également présent dans Vista. WinHttpRequest a Les masses devraient être en train de crier, mais après beaucoup de recherches, j'ai trouvé only one thread where people encountered this problem
Ré-enregistrer winhttp résout le problème, c'est ce que nous faisons. Je ne peux simplement pas croire que c'est la meilleure pratique pour ré-enregistrer ce composant couramment utilisé et b) si c'est un bug, peut-être que cela aidera quelqu'un d'autre.
-Rob
Comment l'avez-vous ré-enregistré? ce que vous avez tapé en ligne de commande? merci – Cem
"regsvr32% SystemRoot% \ System32 \ WinHttp.dll" –