Domanda

Fondamentalmente penso che questo sia un bug in Windows Server 2008, ma non sono un ninja COM, quindi sembra altrettanto probabile che sto facendo qualcosa di stupido. La domanda è: errore del programmatore o bug?

Usiamo WinHttpRequest (il componente ActiveX di WinHttp) per leggere http: // e https: //. Il ProgID che stiamo usando per cercare il componente è WinHttp.WinHttpRequest.5.1 .

La nostra applicazione ha funzionato bene su XP e Windows Server 2003. In Windows Server 2008 avremmo ricevuto un errore ( 0x800029C4A " Errore durante il caricamento della libreria dei tipi / DLL " ) durante il caricamento della libreria dei tipi. La nuova registrazione di winhttp risolve il problema. La domanda è: perché?

Dopo numerosi deadends, ho trovato quanto segue nel registro.

Windows 2008 Server SP2 come installato:

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

Dopo aver chiamato regsvr32% SystemRoot% \ System32 \ WinHttp.dll , questa chiave cambia valore:

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

La mia comprensione è che le chiavi di tipo REG_EXPAND_SZ espandono i percorsi di sistema come % SystemRoot% ma REG_SZ no. Pertanto, il tipo deve essere REG_EXPAND_SZ oppure utilizzare il percorso espanso. La nuova registrazione di WinHttp corregge il percorso e quindi corregge WinHttpRequest. (Per quanto ne so, XP ha usato C: \ Windows \ System32 \ winhttp.dll e Server 2003 ha usato un'installazione SxS che funziona per me > 0

Quindi penso che questo sia un bug e ho archiviato un bug con Microsoft (o almeno quanto potevo fare dalla palude che è connect.microsoft.com.) Ma ecco la parte che non capisco: poiché Windows Server 2008 e Vista sono molto simili, sembra probabile che questo problema sia presente anche in Vista. WinHttpRequest deve essere un oggetto comunemente usato. Le masse dovrebbero urlare, ma dopo un sacco di ricerche su google ho trovato solo un thread in cui le persone hanno riscontrato questo problema .

La nuova registrazione di winhttp risolve il problema, quindi è quello che stiamo facendo. Sto pubblicando questo perché a) Non riesco proprio a credere che sia meglio registrare nuovamente questo componente di uso comune eb) se si tratta di un bug, forse questo aiuterà qualcun altro.

-Rob

È stato utile?

Soluzione

Sì, questo risulta essere un bug nel manifest di W2K8, ma non necessariamente il manifest per Vista. Microsoft sembra essere consapevole di questo problema e Microsoft dovrebbe essere in grado di risolvere questo problema nella prossima versione. La soluzione corrente per WinHTTP e ServerXmlHttp è di registrare manualmente il componente COM.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top