none
webbrowsercontrolでPDFを読み込むと落ちてしまいます RRS feed

  • 質問

  • vb2012で開発しています。

    フォームにwebbrowserコントロールを張り付けて

    WebBrowser1.Navigate("about:blank")

    WebBrowser1.Url = New Uri("c:\aaa.pdf")

    とするとアプリケーションごと落ちてしまいます。特にエラー表示も出ません。

    落ちない場合もあるのですが、落ちる頻度が高いです。

    単画面のEXEを作ってそれにwebbrowserコントロールを張り付けて同様のことをした場合は全く問題なくPDFが表示されるのですが、子フォームを作ってそれにwebbrowserコントロールを張り付けた場合に落ちてしまいます。

    今のところ、落ちるプログラムと落ちないプログラムの違いは単画面のEXEか子フォームに表示するかの違いかなと思っているのですが、なぜ落ちるのか全くわからなくて困っています。

    webbrowserコントロールの内部ではadobereaderDCで表示されるようにしています。

    ご存知の方いらっしゃいましたらアドバイスをお願いいたします。

    2018年10月16日 10:19

回答

  • > アセンブリ情報のGUIDを新しいものに変更し、
    > Exeの名前が日本語のままだったので半角英数字に変更したら正常に動作するようになりました。
    > 関係がよくわからない。。。

    単に、その変更により破壊されるメモリ箇所が変化し、エラーが発生しにくくなっただけですは?
    たぶん、潜在的にはバグは残ったままだと思います。
    ちなみにヒープを破壊している箇所の特定は、"Application Verifier" を使えば簡単に検出できると思います。
    -----------------------------------------------------
    Windows SDK ツール:Application Verifier のご紹介
    https://blogs.msdn.microsoft.com/japan_platform_sdkwindows_sdk_support_team_blog/2011/05/29/windows-sdk-application-verifier/
    -----------------------------------------------------

    • 回答としてマーク べっち 2018年10月17日 7:16
    2018年10月17日 2:26
  • 私の環境(Windows 10 x64, Visual Studio 2017, Adobe Acrobat Reader DC 2019.008.20074)で、ご質問の通り、下記のようなコードで試してみましたが再現しませんでした。

    Public Class Form1
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim f As New Form2()
            f.ShowDialog(Me)
            f.Dispose()
        End Sub
    End Class
    
    Public Class Form2
        Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            WebBrowser1.Navigate("about:blank")
            WebBrowser1.Url = New Uri("c:\aaa.pdf")
        End Sub
    End Class


    もし上記のようなシンプルなコードで再現するとなると、Acrobat Reader 側に問題があるとも考えられます。

    • 回答としてマーク べっち 2018年10月17日 0:35
    2018年10月16日 12:49
  • 例外コード: 0xc0000374

    これはヒープ破損(STATUS_HEAP_CORRUPTION)ですね。どこかで誰かがヒープにアクセスして壊しているのでしょう。


    Hebikuzure aka Murachi Akira

    • 回答としてマーク べっち 2018年10月17日 7:16
    2018年10月17日 2:04

すべての返信

  • 私の環境(Windows 10 x64, Visual Studio 2017, Adobe Acrobat Reader DC 2019.008.20074)で、ご質問の通り、下記のようなコードで試してみましたが再現しませんでした。

    Public Class Form1
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim f As New Form2()
            f.ShowDialog(Me)
            f.Dispose()
        End Sub
    End Class
    
    Public Class Form2
        Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            WebBrowser1.Navigate("about:blank")
            WebBrowser1.Url = New Uri("c:\aaa.pdf")
        End Sub
    End Class


    もし上記のようなシンプルなコードで再現するとなると、Acrobat Reader 側に問題があるとも考えられます。

    • 回答としてマーク べっち 2018年10月17日 0:35
    2018年10月16日 12:49
  • ありがとうございます。

    上記のコードで試してみました。これだと100回ぐらい読み直しても落ちないですね。

    今開発中のアプリで落ちた時はイベントビューアに下記のように出てます。

    アプリケーションのログ

    障害が発生しているアプリケーション名: xxx.vshost.exe、バージョン: 11.0.50727.1、タイム スタンプ: 0x5011d445
    障害が発生しているモジュール名: ntdll.dll、バージョン: 10.0.17134.254、タイム スタンプ: 0xbf2f8c99
    例外コード: 0xc0000374
    障害オフセット: 0x000d8869
    障害が発生しているプロセス ID: 0x1df0
    障害が発生しているアプリケーションの開始時刻: 0x01d465af22a298c0
    障害が発生しているアプリケーション パス: C:\source\xxx\xxx\bin\Release\xxx.vshost.exe
    障害が発生しているモジュール パス: C:\WINDOWS\SYSTEM32\ntdll.dll
    レポート ID: e1286378-5da5-4d7a-b2ed-8528fa861f19
    障害が発生しているパッケージの完全な名前:
    障害が発生しているパッケージに関連するアプリケーション ID:

    システムのログ

    コンピューターの既定 のアクセス許可の設定では、CLSID
    {C2F03A33-21F5-47FA-B4BB-156362A2F239}
     および APPID
    {316CDED5-E4AE-4B15-9113-7055D84DCC97}
     の COM サーバー アプリケーションに対するローカルアクティブ化のアクセス許可を、アプリケーション コンテナー 利用不可 SID (利用不可) で実行中のアドレス LocalHost (LRPC 使用) のユーザー NT AUTHORITY\LOCAL SERVICE SID (S-1-5-19) に与えることはできません。このセキュリティ アクセス許可は、コンポーネント サービス管理ツールを使って変更できます。

    adobe readerDCの問題かと思ったりしますが問題なく動くものもあるということはやはり開発中のアプリになにか不具合があるのでしょうか。

    2018年10月17日 0:34
  • 例外コード: 0xc0000374

    これはヒープ破損(STATUS_HEAP_CORRUPTION)ですね。どこかで誰かがヒープにアクセスして壊しているのでしょう。


    Hebikuzure aka Murachi Akira

    • 回答としてマーク べっち 2018年10月17日 7:16
    2018年10月17日 2:04
  • アセンブリ情報のGUIDを新しいものに変更し、Exeの名前が日本語のままだったので半角英数字に変更したら正常に動作するようになりました。関係がよくわからない。。。
    2018年10月17日 2:21
  • > アセンブリ情報のGUIDを新しいものに変更し、
    > Exeの名前が日本語のままだったので半角英数字に変更したら正常に動作するようになりました。
    > 関係がよくわからない。。。

    単に、その変更により破壊されるメモリ箇所が変化し、エラーが発生しにくくなっただけですは?
    たぶん、潜在的にはバグは残ったままだと思います。
    ちなみにヒープを破壊している箇所の特定は、"Application Verifier" を使えば簡単に検出できると思います。
    -----------------------------------------------------
    Windows SDK ツール:Application Verifier のご紹介
    https://blogs.msdn.microsoft.com/japan_platform_sdkwindows_sdk_support_team_blog/2011/05/29/windows-sdk-application-verifier/
    -----------------------------------------------------

    • 回答としてマーク べっち 2018年10月17日 7:16
    2018年10月17日 2:26