2009-03-06 8 views
21

Hasta hace poco, estábamos felizmente usando registration-free COM para nuestros componentes COM nativos y .NET. Sin embargo, nos encontramos con un problema extraño en el que nuestra aplicación comenzó a fallar aleatoriamente en Windows XP SP3 (pero no en Vista) después de que solo cambiamos el número de versión de un ensamblado .NET para pasar del release candidate al release. (¿No odias la ley de Murphy?)¿Alguien está utilizando con éxito el COM sin registro con componentes .NET?

Después de muchos días perdidos y rechinar los dientes, descubrimos que el problema era un known bug in sxs.dll que causa daños en el montón al recuperar información sobre una clase .NET. Hay una solución urgente que hace que el problema desaparezca, pero las soluciones rápidas no están destinadas a ser redistribuidas.

Estamos un tanto perplejos de que haya un error tan horrible en la implementación COM sin registro. ¿Hay alguien por ahí que esté utilizando COM libre de registro para los componentes .NET? ¿Cómo resolviste este problema?

+0

1 cuestión importante que no estaba al tanto de! Por cierto, ¿puedo sugerirle que agregue la etiqueta "regfreecom" ya que esa etiqueta es más común para las preguntas COM sin registro? – MarkJ

+1

... de hecho lo retengo solo ... espero que OK – MarkJ

+0

Claro. Las etiquetas consistentes son más útiles. –

Respuesta

9

Este problema está relacionado con la forma en que SxS calcula el tamaño de la información de la clase. El número de versión del ensamblaje es parte de esta información.

Dado que estaba trabajando con el número de versión candidata de lanzamiento, quizás la solución para usted es hacer que el número de versión del lanzamiento tenga la misma longitud que el lanzamiento de RC.

Si esto no funciona, hay un proceso establecido para solicitar derechos de redistribución para las revisiones. Me comprometo con el soporte al cliente de Microsoft para seguir esta ruta.

4

Estamos utilizando COM libre de registro para componentes nativos y .NET. Decidimos usar un número de versión de ensamblaje fijo para estos componentes (principalmente para evitar saturar el registro al registrar repetidamente componentes .NET que tenían un número de compilación dinámico/*). No es ideal, pero tenemos otras formas de determinar qué versión de un componente determinado se está utilizando (nunca se parchean de forma individual).

¡Eso suena como un problema muy desagradable! Ese artículo de KB casi parece que usar SxS es opcional ... Por lo que yo sé, ¿es la única forma de hacer COM sin registro?

+1

Gracias por responder. Escuchar a otros usando COM sin registro para .NET sin problemas al menos indica que simplemente hemos tenido mala suerte. Tenga en cuenta que lo que desencadenó el problema para nosotros fue probablemente un cambio en el tamaño del ensamblaje. No cambiar la versión probablemente no lo proteja. –

Cuestiones relacionadas