VB.Net / Acrobat - 用户手动退出程序后Acrobat挂起

时间:2012-06-04 15:43:32

标签: vb.net acrobat

我目前遇到VB.Net和Adobe Acrobat的问题。问题来自退出Acrobat,但Windows任务栏仍然表明有一个Acrobat.exe进程打开。我尝试过使用 Marshal.ReleaseComObject(),但它仍然挂起。我不想依赖任务栏上的“结束进程”选项来删除它。

以下是我尝试使用的代码片段:

Try
   'Tries To Close Acrobat Application
        acrobatApp.Exit()
        System.Runtime.InteropServices.Marshal.ReleaseComObject(javaScriptObj)
        javaScriptObj = Nothing
        System.Runtime.InteropServices.Marshal.ReleaseComObject(acroPDDoc)
        acroPDDoc = Nothing
        System.Runtime.InteropServices.Marshal.ReleaseComObject(acrobatAVDoc)
        acrobatAVDoc = Nothing
        System.Runtime.InteropServices.Marshal.ReleaseComObject(acrobatApp)
        acrobatApp = Nothing

   'Below is a snippet of code that I found for garbage collecting, but it did not work
        'GC.Collect()
        'GC.WaitForPendingFinalizers()

    Catch ex As Exception
        'Acrobat Could Be Closed Already
    End Try

虽然我不确定这是否有问题 - 我在Acrobat端运行javascript saveAs脚本以制作文件的副本。这也可能是它悬挂的原因,但我根据保存文件和退出其他Acrobat / Microsoft程序的基本知识对其进行了排除。

任何帮助都会有益! 谢谢!

编辑: - 我忘了提到Acrobat只在我的申请结束时关闭。 (目前)我试图让用户手动关闭Acrobat应用程序。

1 个答案:

答案 0 :(得分:1)

我想我不会是唯一一个遇到麻烦的人,所以我对这个问题想出了一个“肮脏的回答”。虽然这不是回答这个问题的最常规方式,但可以通过这个过程完成。

  1. 获取已打开的acrobat文件。
  2. 遍历整个打开的Acrobat文件 - 并将文件名存储到临时数据结构(arrayList,array等)
  3. 运行“acrobatApp.CloseAllDocs()”,“acrobatApp.Exit()”以及杀死整个Acrobat进程的函数。
  4. 从VB端重新打开文档 - 使用存储在数据结构中的链接。
  5. 展示Acrobat。

    If acrobatApp IsNot Nothing AndAlso acrobatApp.GetNumAVDocs > 0 Then
            Dim docs(acrobatApp.GetNumAVDocs) As String
    
            'Saving And Formatting Names Of Opened Documents
            For i = 0 To acrobatApp.GetNumAVDocs - 1
                acrobatAVDoc = acrobatApp.GetAVDoc(i)
                acroPDDoc = acrobatAVDoc.GetPDDoc
                javaScriptObj = acroPDDoc.GetJSObject
                docs(i) = javaScriptObj.path().ToString.Replace("/", "\").Substring(1)
                position = docs(i).IndexOf("\")
                docs(i) = docs(i).Substring(0, position) + ":\" + docs(i).Substring(position + 1)
            Next
    
            'Closing And Killing Acrobat Application
            acrobatApp.CloseAllDocs()
            KillAcrobat()
    
            'Creating New Instance Of Acrobat
            acrobatApp = CreateObject("AcroExch.App")
    
            'Opening All Previously Opened Documents
            For i = 0 To docs.Length - 1
                acrobatAVDoc = CreateObject("AcroExch.AVDoc")
                acrobatAVDoc.Open(docs(i), Path.GetFileName(docs(i)))
            Next
    
            'Displaying The Application
            acrobatApp.Show()
    
        End If
    
相关问题