Necesito automatizar documentos de oficina (Word & Excel) desde mi aplicación .Net4.C# .Net4: objetos COM (dinámicos) correctamente desechables
Dado que realmente no puedo forzar a mis usuarios a usar una versión específica de Office, no utilizo ensamblados de interoperabilidad o tlbimp, por lo que mi proyecto no contiene referencias adicionales ni fallará toda la aplicación si Office no está instalado (la función simplemente no estará disponible).
En lugar de eso pedir al sistema que el servidor COM puede manejar "Word.Application" o "Excel.Application":
dynamic app = Activator.CreateInstance(Type.GetTypeFromProgID("Word.Application"));
app.Foo();
Me preocupa cómo deshacerse adecuadamente del objeto "aplicación" cuando estoy Terminé con esto, ya que ahora tengo que preocuparme por dos sistemas de administración interna (recuento de referencias COM y seguimiento de referencia .Net). Idealmente, debería ser capaz de ajustar el objeto dinámico de la aplicación en una clase de contenedor desechable y asegurarme de que el objeto COM subyacente no se referencia cuando se descarta el contenedor.
EDITAR: También me gustaría saber cómo hacer correctamente el objeto COM "en vivo" cuando haya terminado con él, ya que Word está en un proceso separado. Debería poder instanciar la aplicación Word, automatizarla y luego liberar todas mis referencias, pero la aplicación Word debería permanecer abierta.
posible duplicar: http://stackoverflow.com/questions/2203968/how-to-access-microsoft-word-existing-instance-using-late-binding –
No necesariamente, el candidato duplicado es más sobre el lado de instanciación de COM desde C#, esta pregunta es acerca de la eliminación. –
Asegúrese de deshacerse de cualquier objeto COM intermediario también - http://stackoverflow.com/a/158752/188926 – Dunc