例外なくクラッシュする .net 4.0 アプリケーションがあります。マシンに .net 4.5 をインストールしても、アプリケーションはクラッシュしませんでした。ほとんどの場合、しばらくアイドル状態のときにアプリがクラッシュします。アプリケーションを debugger にアタッチしようとしましたが、助けにはなりませんでした。また、アプリケーションをwindbg.exeにアタッチしようとしましたが、それも役に立ちませんでした。
実際、私のアプリケーションは.net 4.5の機能を使用していません。
Windows イベント ビューアーで、アプリケーション クラッシュのログを以下に示します。イベント ログ : タイプ 'System.AccessViolationException' の未処理の例外が発生しました。追加情報: 保護されたメモリの読み取りまたは書き込みを試みました。これは多くの場合、他のメモリが破損していることを示しています。
これに関する経験がある場合、または便利なヒントやツールがある場合は、お知らせください。あらゆる種類のヘルプを歓迎します。
スタックトレース:
at RealNative.RealNativeWindowCopy.DispatchMessageW(MSG& msg)
at RealNative.RealNativeWindowCopy.LocalModalMessageLoop(Form form)
at RealNative.RealNativeWindowCopy.CreateWndAndMsgLoopThreadFunction()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
エラーを発生させる可能性のある関数 private void CreateWndAndMsgLoopThreadFunction() { try {
MyNativeWindow nw;
nw = new MyNativeWindow();
CreateParams cp = new CreateParams();
cp.Caption = this.m_winTitle;
cp.ClassName = "!!" + this.m_classname; // i've modified the treatment so if the classname starts with !!, it will be registered undet that name
nw.UserWndProc = new UserWndProc(UserWndProcWrapper);
nw.CreateHandle(cp);
m_hWnd = nw.Handle; // very important !
// check if handle is null
if (m_hWnd == IntPtr.Zero)
{
MessageBox.Show("VishException in CreateWndAndMsgLoopThreadFunction", "Error", MessageBoxButtons.OKCancel);
}
while (true)
{
//
// if i'm getting true that means i've got WM_QUIT.
//
bool bReply = LocalModalMessageLoop(null);
if (bReply == true)
return;
}
#if _SHOW_DBG_MSGS
MDBGLogger.MDBGLogger.AlwaysLine("Exiting messageLoop");
#endif
}
catch (Exception e)
{
MessageBox.Show("VishException in CreateWndAndMsgLoopThreadFunction", "Error", MessageBoxButtons.OKCancel);
}
}