Pregunta

Básicamente creo que este es un error en Windows Server 2008, pero no soy un ninja COM, por lo que parece igualmente probable que solo esté haciendo algo tonto. La pregunta es: ¿error o error del programador?

Utilizamos WinHttpRequest (el componente ActiveX de WinHttp) para leer http: // y https: //. El ProgID que estamos utilizando para buscar el componente es WinHttp.WinHttpRequest.5.1 .

Nuestra aplicación funcionó bien en XP y Windows Server 2003. Bajo Windows Server 2008 obtendríamos un error ( 0x800029C4A " Error al cargar la biblioteca de tipos / DLL " ) al cargar la biblioteca de tipos. Volver a registrar winhttp soluciona el problema. La pregunta es, ¿por qué?

Después de numerosos muertos vivientes, encontré lo siguiente en el registro.

Windows 2008 Server SP2 como instalado:

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

Después de llamar a regsvr32% SystemRoot% \ System32 \ WinHttp.dll , esta clave cambia el valor:

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

Entiendo que las teclas de tipo REG_EXPAND_SZ expanden las rutas del sistema como % SystemRoot% pero REG_SZ no lo hacen. Por lo tanto, el tipo debería ser REG_EXPAND_SZ , o debería usarse la ruta expandida. Volver a registrar WinHttp corrige la ruta y, por lo tanto, corrige WinHttpRequest. (Por lo que puedo decir, XP usó C: \ Windows \ System32 \ winhttp.dll y Server 2003 usó una instalación SxS que funciona para mí > 0

Así que creo que esto es un error, y presenté un error con Microsoft (o al menos tanto como podría hacerlo desde el pantano que es connect.microsoft.com). Pero aquí está la parte que no entiendo: Como Windows Server 2008 y Vista son muy similares, parece probable que este problema también esté presente en Vista. WinHttpRequest tiene que ser un objeto de uso común. Las masas deberían estar gritando, pero después de mucho googlear encontré solo un hilo en el que las personas encontraron este problema .

Volver a registrar winhttp soluciona el problema, así que eso es lo que estamos haciendo. Estoy publicando esto porque a) simplemente no puedo creer que sea una buena práctica volver a registrar este componente de uso común yb) si es un error, tal vez esto ayude a alguien más.

-Rob

¿Fue útil?

Solución

Sí, esto resulta ser un error en el manifiesto de W2K8, pero no necesariamente el manifiesto para Vista. Microsoft parece estar al tanto de este problema y debería poder solucionarlo en la próxima versión. La solución actual para WinHTTP y ServerXmlHttp es registrar manualmente el componente COM.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top