1

我目前遇到 VB.Net 和 Adob​​e 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 应用程序的情况。

4

1 回答 1

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
    
于 2012-06-04T20:31:56.673 回答