Tengo un cliente/socio que intenta vincular su aplicación con la nuestra utilizando nuestra funcionalidad COM expuesta. Hasta el momento, tienen un objeto COM que representa una instancia de nuestro paquete de software y luego usan nuestros métodos COM para crear algo programáticamente para el usuario en función de lo que han hecho en su aplicación. Es esencialmente una característica de "exportación".Liberación de "propiedad" del objeto COM en .NET
Lo que me han pedido que haga, lo que no sé cómo hacer es permitir que el usuario decida cuándo se cierra la instancia. Lo que quiero decir con esto es cuando nuestro paquete de software está cargado, es visible y el usuario lo interactúa. Cuando hayan terminado, naturalmente harán clic en la cruz en la parte superior derecha para salir del software. Esto no funciona ya que el objeto COM aún está "activo" en su aplicación. Nuestro paquete de software solo se puede cerrar matando el proceso en el administrador de tareas mientras la aplicación que lo cargó a través de COM permanece abierta. Una vez que su aplicación finalice, la nuestra se cerrará automáticamente. Parece como si su aplicación "posee" la nuestra debido a la llamada COM.
He hecho una aplicación de demostración rápida en C# para tratar de usar cosas como Marshal.FinalReleaseComObject(myObject)
en vano.
Me doy cuenta de que usar COM para este tipo de cosas no es para lo que está destinado, pero espero que haya algún tipo de solución alternativa? El cliente/socio está usando VB.NET, pero C# está bien.
Aclare si su aplicación está automatizada desde la propia aplicación (similar a VBA scripting dentro de las aplicaciones VS o Office) o desde afuera (similar a usar la automatización de Word para crear documentos nuevos desde su propia aplicación de consola/script) –
No pueden cerrar una ventana? Eso no tiene sentido, necesitarás aclararlo. –
Es desde fuera, están usando VB para iniciar un nuevo proceso al hacer referencia a nuestro exe y al crear una instancia de un objeto COM a partir de él. Tenemos un "Abrir" que hace exactamente lo que parece, abre una ventana utilizable de nuestro paquete de software. En términos de no poder cerrar la ventana, no puede hacer clic en la X roja en la parte superior derecha, así puede hacerlo, pero no pasa nada. Solo se cerrará cuando su aplicación VB esté cerrada. No sé mucho sobre la interoperabilidad COM, pero parece que la aplicación VB es la propietaria o el padre de ese proceso. – sxthomson