Dois-je vraiment enregistrer WinHttp sur Windows Server 2008 avant d'utiliser WinHttpRequest.5.1?

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

Question

En gros, je pense qu’il s’agit d’un bogue dans Windows Server 2008, mais je ne suis pas un ninja COM, il est donc tout aussi probable que je ne fasse que de la bêtise. La question est: bug ou erreur de programmeur?

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 fonctionnait parfaitement sous XP et Windows Server 2003. Sous Windows Server 2008, nous rencontrions une erreur ( 0x800029C4A "Erreur lors du chargement de la bibliothèque de types / DLL" ) lors du chargement de la bibliothèque de types. Ré-enregistrer winhttp corrige le problème. La question est, pourquoi?

Après de nombreuses impasses, j'ai trouvé ce qui suit dans le registre.

Windows 2008 Server SP2 tel qu'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 clé change la valeur:

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

D'après ce que j'ai compris, les clés de type REG_EXPAND_SZ développent les chemins système comme % SystemRoot% , mais REG_SZ ne le fait pas. Donc, le type doit être REG_EXPAND_SZ ou le chemin développé doit être utilisé. Ré-enregistrer WinHttp corrige le chemin et corrige donc WinHttpRequest. (Pour autant que je sache, XP utilisait C: \ Windows \ System32 \ winhttp.dll et Server 2003 utilisait une installation SxS qui fonctionnait pour moi > 0

Donc, je pense que c'est un bogue, et j'ai déposé un bogue avec Microsoft (ou au moins autant que je pouvais le faire depuis le marais qu'est connect.microsoft.com.) Mais voici la partie que je ne reçois pas: Windows Server 2008 et Vista étant très similaires, il est également probable que ce problème soit présent dans Vista. WinHttpRequest doit être un objet couramment utilisé. Les masses devraient crier, mais après beaucoup de recherches sur Google, j'ai trouvé un seul thread dans lequel les utilisateurs ont rencontré ce problème .

Ré-enregistrer winhttp corrige le problème, c’est ce que nous faisons. Je publie ce message car a) je ne peux tout simplement pas croire que la meilleure pratique consiste à ré-enregistrer ce composant couramment utilisé et b) s'il s'agit d'un bogue, peut-être que cela aidera quelqu'un d'autre.

-Rob

Était-ce utile?

La solution

Oui, il s’agit d’un bogue du manifeste de W2K8, mais pas nécessairement du manifeste de Vista. Microsoft semble être au courant de ce problème et Microsoft devrait pouvoir le résoudre dans la prochaine version. La solution actuelle pour WinHTTP et ServerXmlHttp consiste à enregistrer manuellement le composant COM.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top