0

例外なくクラッシュする .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);
                                }
        }
4

1 に答える 1