2009-10-28 20 views
2

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

+0

Comment l'avez-vous ré-enregistré? ce que vous avez tapé en ligne de commande? merci – Cem

+0

"regsvr32% SystemRoot% \ System32 \ WinHttp.dll" –

Répondre

1

Oui, cela se révèle être un bug dans le manifeste de W2K8, mais pas nécessairement le manifeste pour Vista. Microsoft semble être conscient de ce problème et Microsoft devrait être en mesure de résoudre ce problème dans la prochaine version. Le travail actuel autour de WinHTTP ainsi que ServerXmlHttp consiste à enregistrer manuellement le composant COM.