トップ回答者
webbrowsercontrolでPDFを読み込むと落ちてしまいます

質問
-
vb2012で開発しています。
フォームにwebbrowserコントロールを張り付けて
WebBrowser1.Navigate("about:blank")
WebBrowser1.Url = New Uri("c:\aaa.pdf")
とするとアプリケーションごと落ちてしまいます。特にエラー表示も出ません。
落ちない場合もあるのですが、落ちる頻度が高いです。
単画面のEXEを作ってそれにwebbrowserコントロールを張り付けて同様のことをした場合は全く問題なくPDFが表示されるのですが、子フォームを作ってそれにwebbrowserコントロールを張り付けた場合に落ちてしまいます。
今のところ、落ちるプログラムと落ちないプログラムの違いは単画面のEXEか子フォームに表示するかの違いかなと思っているのですが、なぜ落ちるのか全くわからなくて困っています。
webbrowserコントロールの内部ではadobereaderDCで表示されるようにしています。
ご存知の方いらっしゃいましたらアドバイスをお願いいたします。
- 移動 立花楓Microsoft employee, Moderator 2018年10月16日 23:59 Windows クライアント開発 > Windows クライアント開発
回答
-
> アセンブリ情報の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
-
私の環境(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
すべての返信
-
私の環境(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
-
ありがとうございます。
上記のコードで試してみました。これだと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の問題かと思ったりしますが問題なく動くものもあるということはやはり開発中のアプリになにか不具合があるのでしょうか。
-
> アセンブリ情報の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