2012-01-17 28 views
4

私のアプリケーションでクラッシュが発生したことを調査中です。EventLog.EntryWrittenイベントを購読して、EntryWrittenイベントのイベントログを監視していることがわかりました。私はReflectorのEventLogクラスを見ていて、WinDBGのコールスタックの後に、私のアプリケーションがどこに失敗しているのかを見てきました。まず、ここではWinDBGの中eestackの出力自分のアプリケーションが失敗した場合の周りです:!はC#アプリケーションのクラッシュ原因

0632e620 74c9e900 mscorwks!StrongNameErrorInfo+0x103e4, calling mscorwks!GetMetaDataInternalInterface+0x7f70 
0632e694 74c9e855 mscorwks!StrongNameErrorInfo+0x10339, calling mscorwks+0x31c0 
0632e6a0 74215058 (MethodDesc 0x7402b7c4 +0x18 System.Security.CodeAccessPermission.RevertAssert()), calling (MethodDesc 0x740c84fc +0 System.Security.SecurityRuntime.RevertAssert(System.Threading.StackCrawlMark ByRef)) 
0632e6ac 73df4598 (MethodDesc 0x738bc65c +0xa0 System.Diagnostics.SharedUtils.CreateSafeWin32Exception(Int32)), calling (MethodDesc  0x7402b7c4 +0 System.Security.CodeAccessPermission.RevertAssert()) 
0632e6e4 73ee6fa0 (MethodDesc 0x738e064c System.Diagnostics.EventLog.get_OldestEntryNumber()), calling mscorwks!StrongNameErrorInfo+0x1031b 
0632e6f4 73df24ed (MethodDesc 0x738e06e8 +0x1bd System.Diagnostics.EventLog.CompletionCallback(System.Object)), calling (MethodDesc 0x738e064c +0 System.Diagnostics.EventLog.get_OldestEntryNumber()) 
0632e728 74bb8cef mscorwks!CoUninitializeEE+0x5687, calling mscorwks!CoUninitializeEE+0x5613 
0632e73c 73df0fe4 (MethodDesc 0x738e096c +0x94 System.Diagnostics.EventLog.StaticCompletionCallback(System.Object, Boolean)), calling 739443d4 

大雑把に、私はここにリフレクターに表示されるものとするOldestEntryNumberためのgetアクセサの一部であることを、次の

if (!UnsafeNativeMethods.GetOldestEventLogRecord(this.readHandle, number)) 
{ 
    throw SharedUtils.CreateSafeWin32Exception(); 
} 

このWin32Exceptionは、私のアプリケーションがクラッシュする原因となっているものです。 UnsafeNativeMethods.GetOldestEventLogRecord(...)方法を見て:

[DllImport("advapi32.dll", CharSet=CharSet.Unicode, SetLastError=true)] 
public static extern bool GetOldestEventLogRecord(SafeHandle hEventLog, int[] number); 

だから私は私の問題を推測していますがどちらかの2つのものの一つです:

  1. GetOldestEventLogRecord(...)方法は、何らかの理由で失敗しています。
  2. システムはadvapi32.dllにアクセス/ロードできません。これはなぜ私がのどこかで、このメソッドをeestackの出力で呼び出せると思うのでしょうか?この上

任意のアイデアやヘルプは本当に便利といただければ幸いです!

答えて

0

あなたはP /起動しているが間違っているようです。

にそれを変更してみてください:ところで

[DllImport ("advapi32.dll", SetLastError=true)] 
public static extern int GetOldestEventLogRecord (IntPtr hEventLog, ref int OldestRecord); 

は、これらの情報を取得するための別の方法があります:管理のEventLogクラスを使用して。

System.Diagnostics.EventLogEntryCollection 
+1

私はReflectorでこのコードを見ています。これは.NETコードです。この部分は.NETのUnsafeNativeMethodsクラスのものです。 – DukeOfMarmalade

+1

@Jim投稿を更新しました。 – WoLfulus

+0

どういう意味ですか?私のアプリケーションでこのコード行が原因で、このコードがすべて呼び出されています:eventLog.EntryWritten + =新しいEntryWrittenEventHandler(EventLogMonitor); EntryWrittenイベントを購読しているからです。したがって、これは.NETの実装であり、これをどのように処理するのかがわかります。私はそれを変更することはできません、なぜそれが間違っているのか見てみようとしています。 – DukeOfMarmalade

関連する問題