2017-07-26 4 views
0

アプリケーションが起動時にクラッシュすると、イベントログのアプリケーションエラーは、以下の情報提供します:KERNELBASE.dll、バージョン:6.2.15063.483、タイムスタンプ:0xc3955624
例外コード:モジュール名をフォールティング

をオフセット
障害を0xe0434f4d :ここでは0x000eb802
アプリケーション開始前にKernelbase.dllで未処理例外のAppCrashの原因を特定するにはどうすればよいですか?

バックストーリー
は、お客様のネットワークの一つでだ、我々のアプリは、それも開くことができる前にクラッシュしています。私は今、答えを探している日々を過ごしましたが、まだこれを解決することができませんでした。私はいくつかの基本的なトラブルシューティングを始めました。喫煙銃が見つからなかったのですが、新しいユーザープロファイルがこの問題を解決したことを発見したので、これはバックアップして再度実行するのが良い修正だとお勧めしました。アウトソーシングされたIT部門は、最初は同意しましたが、ユーザーデータを新しいプロファイルに移行するのが難しく、影響を受けたユーザーを新しいプロファイルに移行させることはできませんでした。今ではネットワーク上の別のマシンで問題が発生しており、問題はアプリケーションにあると主張しており、修正する時間を費やす必要があります。私はそれが私たちのコードにあればそれを修正する必要があることに同意しますが、これまでのところ、私たちのコードに到達するまでには至っていないようです。また、ローカルのアカウントを持つドメインPCにログインしている2つのアカウントを持つこの1つのネットワークを除いて、これ以外の場所ではこれを見ていません。

アプリケーション情報

  • VB.NETのWindowsはい、アプリケーションイベントハンドラ存在UnhandledExceptionはApplicationEvents.vbファイルであり、.NET 4.5
  • を対象に、アプリをフォーム。

ユーザードメインPC上の環境情報

  • ドメインネットワーク、が、ローカル管理者アカウントの種類と非ドメインローカルアカウントでログインしています。この影響を受ける2人のユーザーは、両方ともローカルアカウントでログインしています。これまでのところ、これはドメインアカウントで誰かにログインすることには影響しません。
    EDIT:訂正。これは、実際にドメインに参加していない2番目のPCです。
  • Workstationは高架を実行した場合
  • アプリケーションがうまく起動し、現在のアップデートでのWindows 10のPro v1703を実行しているが、これはので、管理者が受け入れ可能な解決ではないとして、彼らは常に実行した後に他の問題が発生します。
  • 最近のアップデートまでこのアプリケーションは正常に動作しました。
  • ローカル管理者権限の有無にかかわらず、新しいドメインまたはドメイン以外のアカウントでログインしても問題は発生しません。

    • がkernelbaseを扱うオンライン記事の数十を読んで、これまで唯一の問題

    トラブルシューティングを見て、特定のユーザー・プロファイルに関連しているようです。DLLがクラッシュし、

  • アンインストールを働いていたし、アプリケーション
  • アンインストールを再インストールし、/ Windowsコンポーネントの追加と削除]を使用して.NETを再インストールした修正を持っていたものを見つけることができませんでしたApplication.Startupイベントで
  • を追加しましたいくつかのイベントログのエントリスプラッシュ画面とスタートアップフォームのLoadイベントを使用して、それまでに到達したかどうかを確認します。作業ステーションでこれをテストし、ロギングに成功しました。影響を受けるマシンでは、ロギングは発生しないため、Application.Startupイベントの前であってもクラッシュが発生しているようです。それがクラッシュしながら
  • アプリを監視するためにprocmonのを使用し、プロセスが終了する前に最後の行はCに操作QueryNameInformationFileです:SUCCESSの結果に\ WINDOWS \ SYSTEM32 \ ntdll.dllを。 ProcMonのログは正常に(クラッシュあり)実行されており、クラッシュなしでは上昇しています。私は比較しようとしましたが、何千ものエントリーがあり、原因としては何も目立っていません。

  • ProcMon、ProcDump、WinDbgなどのデータを収集するためのデバッグツールをいくつか調査して使用しました。これまで私が見つけた唯一の事は同じkernelbase.dll例外情報ですが、コードだけが提供され、意味のあるメッセージはありません。私はシンボルをロードする際に問題がありましたが、私はそれを理解したと思います。私はWinDbgを初めて使っているので、100%ダイヤルする必要はありません。私はそれを得ることができませんでしたCLRを正常にロードする.loadby sos clrを使用してください。私は.load C:¥Windows¥Microsoft.NET¥Framework64¥v4.0.30319¥SOS.dllを使ってSOSを読み込み、c:\ windows \ Microsoft.NET \ Framework \ v4 .030319 \ clr.dllでも、まだコード化された例外情報が得られているだけで、メッセージはプレーン・イングリッシュではありません。ここで私はWinDbgの中に!のclrstkを使用してみましたProcDump

    eax=01fcf898 ebx=e0434f4d ecx=00000001 edx=00000000 esi=01fcf928 edi=022da1e0 
    eip=7453b802 esp=01fcf898 ebp=01fcf8f0 iopl=0   nv up ei pl nz ac po nc 
    cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b    efl=00000212 
    KERNELBASE!RaiseException+0x62: 
    7453b802 8b4c2454  mov  ecx,dword ptr [esp+54h] ss:002b:01fcf8ec=0911506f 
    
  • を使用して製造されたダンプファイルをロードした後、私はWinDbgの中.excr使用した場合取得されるものですが、それは

「いいえ輸出clrstkが見つからない」と言います質問

私には、アプリの起動前に処理されていない未処理のCLR例外があると思われます。おそらくファイルやレジストリエントリのいずれかのWindows権限の競合のためですが、私は追跡方法はわかりませんそれ以上はありません。

  • 発生している特定の例外についてもっと知る方法はありますか? kernelbase.dllのオンラインのFault Offsetコードのリストが見つかりませんでした。
  • 他に何を確認できますか?
+0

"処理されていない例外"ハンドラの説明に基づいて、VBのApplication Framework提供イベントを使用しています。これは、メインのUIスレッドでのみ例外をキャプチャすることが私の理解です。 [AppDomain.UnhandledExceptionイベント](https://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception(v = vs.110).aspx#備考)を試すことをお勧めします。アプリケーションフレームワークの使用を継続し、 'Startup'イベントハンドラで' AppDomain.CurrentDomain.UnhandledException'を配線することができます。これを行うと、有用な情報を取得することができます。 – TnTinMn

+0

私はこれを試しましたが運はありません。私はまず、AppDomain.UnhandledExceptionとSystem.Windows.Forms.ThreadExceptionのMyApplication.StartupイベントにAddHandlersを追加しようとしました。私は同じ結果を得た。 Startupイベントでコードが実行されているようには見えません。 msgboxとイベントログへの書き込みを含むいくつかのフィードバックを与えるためにStartupイベントの開始時にコードを追加することで、これをいくつかの方法で証明しました。私はまた、アプリケーションフレームワークを無効にして、代わりにMain()サブを使用してみて、まったく同じ結果を得ました。 Main()のコードを実行する前にクラッシュします。 –

+0

まだ頭が頭にぶつかっていて、ここやテクニットに助けを得ていない。私はマシン上で同じ権利を持つ新しいローカルアカウントを作成し、ProcMonログを作成し、クラッシュしているプロファイルのログと並べて比較しました。最初の60行ほどは同じですが、大きな変化があります。プロファイルが壊れていると、apphelp.dllを参照したり、AppCompatFlagsのレジストリ領域を参照したりするようになります。 1つのプロファイルが互換モードで実行する必要があると考えているように、もう1つのプロファイルは互換モードで実行する必要があると考えているかのようです。そうしたものがクラッシュするものです。 –

答えて

0

これを修正して、アプリが再び動作するようにしました。 ProcMonの2つのログを比較した結果(クラッシュしていたプロファイルと同じ権利を持つ新しいプロファイルの1つ)、クラッシュしていたプロファイル上でapphelp.dllを参照し、 AppCompatFlagsはレジストリ内のキーです。それで、互換モードで動作しようとしていると信じられました。互換モードで動作させる必要はないはずです。

アプリアイコンを右クリックしてプロパティを表示することで、UIを通じて互換モードが設定されていないことを確認しましたが、レジストリにはまだいくつかのレコードが保存されていました。私は、次のキーからアプリのエントリを削除し、ユーザーをログアウトして戻しました。問題はなくなりました。公平になるために、貢献したかもしれない他のいくつかのこともやった。 .NET Repair Toolをダウンロードして実行しました。それを実行した直後に問題を解決することはできませんでしたが、私はそれがちょうどその役を演じた場合に言いたいと思いました。私は最初に修理キットを見つけて、レジストリエントリを見つけて削除してから、ユーザーをログアウトしてからログアウトしました。

最終的には、これが最初に発生した原因はわかりませんが、読んだら、アプリが一度クラッシュした可能性があり、WindowsはWindows上でいくつかの互換性の問題を解決しようとし、一貫してクラッシュする原因となったレジストリにいくつかのキーを保存した。

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers 

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Persisted 
関連する問題