2012-06-04 42 views
1

我目前对VB.Net和Adobe Acrobat有问题。这个问题来自于退出Acrobat,但Windows任务栏仍然声明打开了Acrobat.exe进程。我试过使用Marshal.ReleaseComObject(),但它仍然挂在那里。我不想依赖任务栏上的“结束进程”选项来删除它。VB.Net/Acrobat - Acrobat在用户手动退出程序后挂起

下面的代码片段,我尝试使用:

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

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

  1. 获取打开的acrobat文件总数。
  2. 循环通过整个打开的Acrobat文件 - 和文件名存储到一个临时数据结构(ArrayList中,阵列等)
  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 
    
相关问题