起動直後ファイル読み込み時に強制終了

Issue #920 closed
しょね created an issue

いつも便利に使わせてもらっています。

37.0以降強制終了するようになってしましました。

環境:win10 64bit
   37.0(zip)~Canary1112(zip)

状況:解凍直後の最初の起動の段階からzip、rarなどの書庫、jpgなどの画像ファイルを読み込ませると強制終了する。
   一度オプション>設定を開き、何も変更せずに設定ウィンドウを閉じると以前のように読み込めるようになる。
   アプリケーションを一度正常終了し、再起動するとまたオプションを開かないとファイルが開けません。
   再起動後、開いたブックの復元設定がONの場合はすぐに強制終了します。
   アイコンやウィンドウに書庫をドロップするなどした場合も強制終了します。
   エラーログに関しては生成されないみたいです。

Comments (10)

  1. Ito Mitsuhiro repo owner

    37.0からはネイティブイメージ化による起動高速化処理を実装しており、これが影響している可能性があります。
    Canary1113 ではこれを無効にしたイメージも用意したので、こちらで動作に違いがあるか確認お願いします。

    • NeeViewCanary1113.zip … 通常版
    • NeeViewCanary1113-AnyCPU.zip … ネイティブイメージ化していない版

    Windowsのイベントビューアーにエラーログが残っているかもしれません。
    エラーを発生させた後、イベントビューアーの[Windowsログ]->[Application]のページを開いて確認してみてください。もしログが残っていたらその内容をコメントしていただけると参考になります。


    .NET Frameworkが破損している可能性もあります。「.NET Framework 修復ツール」を試してみてください。(参考)

  2. しょね reporter

    返信ありがとうございます。
    それぞれ試しましたので報告します。

    ・AnyCPU版…同様のエラーが出ます。

    ・.NET修復…同様のエラーが出ます。

    ・イベントビューワのログについて添付します

    1,エラー:ソース .netruntime

    アプリケーション:NeeView.exe
    フレームワークのバージョン:v4.0.30319
    説明: ハンドルされない例外のため、プロセスが中止されました。
    例外情報:System.AccessViolationException
    場所 NeeView.Native.Interop+NativeMethods.NVGetImageCodecInfo(UInt32, System.Text.StringBuilder, System.Text.StringBuilder)
    場所 NeeView.WicDecoders.ListUp()
    場所 NeeView.PictureFileExtension.GetDefaultExtensions()
    場所 NeeView.PictureFileExtension.UpdateDefaultSupprtedFileTypes()
    場所 NeeView.PictureProfile..ctor()
    場所 NeeView.PictureProfile..cctor()

    例外情報:System.TypeInitializationException
    場所 NeeView.PictureProfile.get_Current()
    場所 NeeView.ArchiveEntry.IsImage()
    場所 NeeView.ArchiveEntryCollection+<>c.<GetEntriesWhereImageAndArchiveAsync>b__20_1(NeeView.ArchiveEntry)
    場所 System.Linq.Enumerable+WhereListIterator1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].MoveNext() 場所 System.Collections.Generic.List1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]..ctor(System.Collections.Generic.IEnumerable1<System.__Canon>) 場所 System.Linq.Enumerable.ToList[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](System.Collections.Generic.IEnumerable1<System.__Canon>)
    場所 NeeView.ArchiveEntryCollection+<GetEntriesWhereImageAndArchiveAsync>d__20.MoveNext()
    場所 System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
    場所 System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
    場所 System.Runtime.CompilerServices.AsyncMethodBuilderCore+MoveNextRunner.Run()
    場所 System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction(System.Action, Boolean, System.Threading.Tasks.Task ByRef)
    場所 System.Threading.Tasks.Task.FinishContinuations()
    場所 System.Threading.Tasks.Task1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].TrySetResult(System.__Canon) 場所 System.Runtime.CompilerServices.AsyncTaskMethodBuilder1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].SetResult(System.__Canon)
    場所 NeeView.ArchiveEntryCollection+<GetEntriesAsync>d__17.MoveNext()
    場所 System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
    場所 System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
    場所 System.Runtime.CompilerServices.AsyncMethodBuilderCore+MoveNextRunner.Run()
    場所 System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction(System.Action, Boolean, System.Threading.Tasks.Task ByRef)
    場所 System.Threading.Tasks.Task.FinishContinuations()
    場所 System.Threading.Tasks.Task1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].TrySetResult(System.__Canon) 場所 System.Runtime.CompilerServices.AsyncTaskMethodBuilder1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].SetResult(System.__Canon)
    場所 NeeView.Archiver+<GetEntriesAsync>d__53.MoveNext()
    場所 System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
    場所 System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
    場所 System.Runtime.CompilerServices.AsyncMethodBuilderCore+MoveNextRunner.Run()
    場所 System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction(System.Action, Boolean, System.Threading.Tasks.Task ByRef)
    場所 System.Threading.Tasks.Task.FinishContinuations()
    場所 System.Threading.Tasks.Task1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].TrySetResult(System.__Canon) 場所 System.Runtime.CompilerServices.AsyncTaskMethodBuilder1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].SetResult(System.__Canon)
    場所 NeeView.Archiver+<GetEntriesAsync>d__52.MoveNext()
    場所 System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
    場所 System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
    場所 System.Runtime.CompilerServices.AsyncMethodBuilderCore+MoveNextRunner.Run()
    場所 System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction(System.Action, Boolean, System.Threading.Tasks.Task ByRef)
    場所 System.Threading.Tasks.Task.FinishContinuations()
    場所 System.Threading.Tasks.Task1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].TrySetResult(System.__Canon) 場所 System.Threading.Tasks.UnwrapPromise1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].TrySetFromTask(System.Threading.Tasks.Task, Boolean)
    場所 System.Threading.Tasks.UnwrapPromise1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].ProcessInnerTask(System.Threading.Tasks.Task) 場所 System.Threading.Tasks.UnwrapPromise1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].ProcessCompletedOuterTask(System.Threading.Tasks.Task)
    場所 System.Threading.Tasks.UnwrapPromise`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].Invoke(System.Threading.Tasks.Task)
    場所 System.Threading.Tasks.Task.FinishContinuations()
    場所 System.Threading.Tasks.Task.Finish(Boolean)
    場所 System.Threading.Tasks.Task.ExecuteWithThreadLocal(System.Threading.Tasks.Task ByRef)
    場所 System.Threading.Tasks.Task.ExecuteEntry(Boolean)
    場所 System.Threading.ThreadPoolWorkQueue.Dispatch()

    2,エラー:ソース Application Error

    障害が発生しているアプリケーション名: NeeView.exe、バージョン: 37.9.0.0、タイム スタンプ: 0xbdb13d99
    障害が発生しているモジュール名: KERNELBASE.dll、バージョン: 10.0.18362.239、タイム スタンプ: 0xb6f4b059
    例外コード: 0xe0434352
    障害オフセット: 0x000000000003a839
    障害が発生しているプロセス ID: 0x36e8
    障害が発生しているアプリケーションの開始時刻: 0x01d6bc37d6f937bb
    障害が発生しているアプリケーション パス: E:\win7\downloadfield\NeeViewCanary1113_AnyCPU\NeeViewCanary-AnyCPU\NeeView.exe
    障害が発生しているモジュール パス: C:\WINDOWS\System32\KERNELBASE.dll
    レポート ID: 5cb39efc-039a-4a86-b9fb-3cb5cc0d72c5
    障害が発生しているパッケージの完全な名前:
    障害が発生しているパッケージに関連するアプリケーション ID:

    以上、参考になれば幸いです。

  3. Ito Mitsuhiro repo owner

    詳細な情報ありがとうございます。

    できるだけの対策を施したCanary1118をアップしましたのでお試しください。

    現象が続くようであれば、設定の「対応形式」>「WIC情報を使用する」をOFFにしてみてください。エラーが発生している処理自体を行わないようになります。

  4. しょね reporter

    対応ありがとうございます。
    引き続き同じ環境で通常利用の範囲で試してみましたが、
    「WIC情報を使用する」設定ON/OFFともにエラーがでなくなったように見えます。
    改善されたようです。
    ありがとうございました。

    追加というか、補足説明希望なのですが、
    今回のご対応から、Windows Imaging Componentまわり(ぐぐりました)でのエラーだと推察したのですが
    当方の環境や、使用していた書庫や画像にNeeView側で意図していない状況があったのでしょうか?
    現時点で推測できる範囲で構いませんのでよければご回答お願いします。

    今回はありがとうございました。

  5. Ito Mitsuhiro repo owner

    こちらでは現象を再現できておりませんので、推測になります。
    画像コーデックや画像処理ソフトをインストールするとWIC画像コーデックが増えることがありますので、おそらくそのいずれかの画像コーデックに関連してなんらかの不具合が発生しているものと思われます。
    37.0からWIC情報の取得タイミングを変更したため現象が発現するようになったと思われます。(36.0では起動直後に取得、37.0では画像表示前もしくは設定ウィンドウ表示前。処理自体は同じ)


    Canary1119 では、この取得タイミングを36.0に近いものに変更したのでお試しください。このバージョンで不具合が発生する場合は設定ウィンドウを開けなくなってしまっていると思いますのご連絡ください。別の方法を検討します。

  6. しょね reporter

    返信・解説有り難うございました。
    理解できました。

    >画像処理ソフトからコーデック
    7から10のアップデートで処理ソフトも幾度となく消し入れしているので可能性高そうです。

    先の書き込みに重複になりますが、「WIC情報を使用する」設定ON/OFFともにエラーがでなくなったように見え、(詳細に色々な動作を試せてなかったので回りくどい表現でスミマセン)
    問題解消されたようなので本件は解決フラグを立てます。
    設定ウィンドウの方も問題なくひらけました。

    またなにか気が付きましたらお知らせします。
    ありがとうございました。

  7. Log in to comment