用户关闭主窗口时,PowerPoint进程不会关闭

时间:2012-05-03 14:29:33

标签: c# process automation ms-office powerpoint

如果我通过自动化创建PowerPoint应用程序,则当用户关闭主窗口时,该过程将保留在任务管理器中。我可以假设这是因为我的应用程序持有对PowerPoint应用程序的引用,因此无法进行垃圾回收。但是,我怎么知道用户关闭了PowerPoint应用程序,以便我可以释放所有对它的引用?这里看起来像鸡肉或​​鸡蛋问题。下面是我在表单加载时调用的函数。如果PowerPoint已打开,则使用当前实例。如果没有,它会创建一个新实例。

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

1 个答案:

答案 0 :(得分:1)

  
    

如果PowerPoint已经打开,它将使用当前实例。如果没有,它会创建一个新实例。

  

我不这么认为。 PowerPoint只允许自己的一个实例,但有时它可能会错误地在自动化时留下僵尸实例。它的行为不像Word或Excel,您可以根据需要创建自己的add'l实例。

如果已经有一个实例正在运行,您将获得对它的引用。 如果没有正在运行的实例,您将创建一个新实例并获得对该实例的引用。

释放对PPT实例的引用不应该导致任何问题。如果用户打开它,它应该保持打开状态。

问题更可能是:“我是否应该调用PPT应用程序的.Quit方法?”

一种方法是检查app.Presentations.Count 我不记得PPT是否会在通过自动化调用时自动创建一个新的空白演示文稿;我记得,事实并非如此,但你会想要重复一遍。 IAC,如果.Count> 0(或者可能是1),你知道你已经获得了一个预先存在的PPT实例的引用...即,某人已经在使用它...所以你不想放弃它们。