El proceso de PowerPoint no se cerrará cuando el usuario cierre la ventana principal

Si creo una aplicación de PowerPoint a través de la automatización, el proceso permanece en el Administrador de tareas cuando el usuario cierra la ventana principal. Puedo suponer que esto se debe a que mi aplicación contiene una referencia a la aplicación de PowerPoint, por lo que no se puede recolectar basura. Pero, ¿cómo puedo saber que el usuario cerró la aplicación de PowerPoint para poder publicar todas las referencias a ella? Parece un problema de la gallina o el huevo aquí. A continuación se muestra la función a la que llamo en mi carga de formulario. Si PowerPoint ya está abierto, utiliza la instancia actual. Si no, crea una nueva instancia.

Private Function TryAttachToApplication() As PowerPoint.Application
        Dim app As PowerPoint.Application

        Try
            app = CType(Marshal.GetActiveObject("PowerPoint.Application"), PowerPoint.Application)
        Catch ex As COMException
            app = New PowerPoint.Application
        End Try

        app.Visible = True
        Return app
End Function

preguntado el 03 de mayo de 12 a las 15:05

1 Respuestas

Si PowerPoint ya está abierto, utiliza la instancia actual. Si no, crea una nueva instancia.

No lo creo. PowerPoint solo permite una instancia de sí mismo, aunque a veces puede dejar por error instancias de zombis cuando se automatiza. No se comporta como Word o Excel, donde puede crear instancias adicionales propias según sea necesario.

Si ya hay una instancia ejecutándose, obtendrá una referencia a ella. Si no hay una instancia en ejecución, creará una nueva instancia y obtendrá una referencia a ella.

Liberar referencias a la instancia de PPT no debería causar ningún problema. Si el usuario lo tenía abierto al principio, debería permanecer abierto.

El problema es más probable: "¿Debería llamar al método .Quit de la aplicación PPT o no?"

Un enfoque para eso es verificar app.Presentations.Count. No recuerdo si PPT creará una nueva presentación en blanco automáticamente cuando se invoque a través de Automatización; por lo que recuerdo, no es así, pero querrás comprobarlo dos veces. IAC, si .Count > 0 (o quizás 1), sabrá que obtuvo una referencia a una instancia preexistente de PPT... es decir, alguien ya lo está usando... ellos.

contestado el 03 de mayo de 12 a las 16:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.