我目前遇到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应用程序。
答案 0 :(得分:1)
我想我不会是唯一一个遇到麻烦的人,所以我对这个问题想出了一个“肮脏的回答”。虽然这不是回答这个问题的最常规方式,但可以通过这个过程完成。
展示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