2009-07-09 23 views
5

Tengo un componente COM de 32 bits que es utilizado principalmente por ASP, también tenemos la versión de 64 bits.¿Pueden mis componentes COM de 32 bits y 64 bits co-residir en la misma máquina?

La versión de 64 bits es funcionalmente idéntica y también utiliza el mismo ProgID (y, por lo que sé, el mismo CLSID, etc.).

¿Puedo instalar/registrar la versión de 64 bits en la misma máquina que la versión de 32 bits (obviamente en una carpeta diferente) y hacer que mis aplicaciones existentes de 32 bits sigan utilizando el componente de 32 bits, mientras que la versión de 64 bits?

Se trata de componentes de código nativo escritos en C++ y no en .NET.

Respuesta

7

Esto debería ser posible.

En las ventanas de 64 bits, registry y file system se redirigen para las aplicaciones de 32 bits. El registro para los dll COM de 32 bits estará en una ubicación separada en el registro (HKLM \ Software \ Wow6432Node \ Classes), y sus componentes COM deberían residir en carpetas separadas, 64 bits en Archivos de programa y 32 bits en Archivos de programa (x86) La redirección de registro/archivo para aplicaciones de 32 bits debería hacer que esto funcione de forma transparente.

Es posible que el componente en sí mismo pueda evitar esto, por ejemplo, si crea recursos globales que terminarían en conflicto entre las versiones de 32 bits y 64 bits.

Esta situación ya existe en Windows de 64 bits. En mi sistema de 64 bits que tengo:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Classes \ CLSID {8856F961-340A-11D0-A96B-00C04FD705A2} \ InProcServer32 \ Default = C: \ Windows \ SysWOW64 \ ieframe.dll

y

HKEY_CLASSES_ROOT \ CLSID {8856F961-340A-11D0-A96B-00C04FD705A2} \ InProcServer32 \ Default = C: \ Windows \ System32 \ ieframe.dll

de 32 bits y de 64 bits versión de WebBrowser control en el mismo sistema.

+0

Eso es lo que esperaba que sucediera, pero Reed parece sugerir lo contrario. No puedo probarlo ahora porque no tengo acceso a un entorno de prueba de 64 bits que puedo criticar si se rompe algo. – Kev

+0

@Kev: este fue mi error. Michael está correcto aquí. –

+0

Acabo de encontrar una máquina en la que podría probar esto y todo funciona bien. :) – Kev

Cuestiones relacionadas