2012-06-04 45 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 
    
相關問題