1

現在、VB.NetとAdobeAcrobatで問題が発生しています。この問題は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側でjavascriptsaveAsスクリプトを実行します。これもハングしている理由かもしれませんが、ファイルの保存と他のAcrobat/Microsoftプログラムの終了に関する基本的な知識に基づいて除外しました。

どんな助けでも有益でしょう!ありがとう!

編集:-Acrobatはアプリケーションが終了したときにのみ閉じることを忘れました。(現在)ユーザーがAcrobatアプリケーションを手動で閉じた場合を考慮させようとしています。

4

1 に答える 1

1

これに問題を抱えているのは私だけではないと思うので、この質問に対する「汚い答え」を思いつきました。この質問に答える最も一般的な方法ではありませんが、このプロセスを通じて行うことができます。

  1. 開いている acrobat ファイルの合計を取得します。
  2. 開いている Acrobat ファイル全体をループし、ファイル名を一時データ構造 (arrayList、array など) に保存します。
  3. 「acrobatApp.CloseAllDocs()」、「acrobatApp.Exit()」、および Acrobat プロセス全体を強制終了する関数を実行します。
  4. VB 側からドキュメントを再度開きます - データ構造内に保存されたリンクを使用します。
  5. アクロバットを表示します。

    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 に答える