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

VB.Net/Acrobat-Acrobat在用户手动退出程序后挂起,vb.net,acrobat,Vb.net,Acrobat,我目前对VB.Net和AdobeAcrobat有一个问题。问题来自退出Acrobat,但Windows任务栏仍表示Acrobat.exe进程处于打开状态。我尝试过使用封送处理。ReleaseComObject(),但它仍然挂在那里。我不想依赖任务栏上的“结束进程”选项来删除它 下面是我尝试使用的代码片段: Try 'Tries To Close Acrobat Application acrobatApp.Exit() System.Runtime.Inte

我目前对VB.Net和AdobeAcrobat有一个问题。问题来自退出Acrobat,但Windows任务栏仍表示Acrobat.exe进程处于打开状态。我尝试过使用封送处理。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只有在我的应用程序结束时才会关闭。(目前)如果用户手动关闭AcROAT应用程序,我试图让它考虑这个问题。

我想我不是唯一一个遇到这个问题的人,所以我提出了一个“肮脏的答案”来解决这个问题。虽然这不是回答这个问题最传统的方式,但可以通过这个过程来完成

  • 获取打开的acrobat文件总数
  • 循环浏览整个打开的Acrobat文件,并将文件名存储到临时数据结构中(arrayList、array等)
  • 运行“acrobatApp.CloseAllDocs()”、“acrobatApp.Exit()”和一个终止整个Acrobat进程的函数
  • 从VB端重新打开文档-使用存储在数据结构中的链接
  • 展示杂技演员

    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
    

  • 我想我不会是唯一一个对此有问题的人,所以我对这个问题给出了一个“肮脏的答案”。虽然这不是回答这个问题最传统的方式,但可以通过这个过程来完成

  • 获取打开的acrobat文件总数
  • 循环浏览整个打开的Acrobat文件,并将文件名存储到临时数据结构中(arrayList、array等)
  • 运行“acrobatApp.CloseAllDocs()”、“acrobatApp.Exit()”和一个终止整个Acrobat进程的函数
  • 从VB端重新打开文档-使用存储在数据结构中的链接
  • 展示杂技演员

    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