none
VisualStudio2008で開発した業務画面を繰り返し表示させると、システムが落ちる RRS feed

  • 質問

  • VisualStudio2008にて、原因を追いきれないエラーが発生したためご質問させていただきました。

    現在、VisualStudio2008 にて開発された電話業務の支援システムの保守を行っています。

    お客様に電話が繋がると、PCに電話先の情報(画面)をポップアップにて表示するシステムにて
    繰り返し架電をすると、ポップアップが表示されない、もしくはシステムが落ちる事象(動作不安定)が発生しました。

    ログを見ると、下記のエラーが出ておりました。

    ****************************************エラー詳細ここから****************************************
    :System.ComponentModel.Win32Exception: Error creating window handle.
       at System.Windows.Forms.NativeWindow.CreateHandle(CreateParams cp)
       at System.Windows.Forms.Control.CreateHandle()
       at System.Windows.Forms.Control.get_Handle()
       at System.Windows.Forms.Application.ParkHandle(CreateParams cp)
       at System.Windows.Forms.Control.CreateHandle()
       at System.Windows.Forms.Control.get_Handle()
       at System.Windows.Forms.Control.CreateGraphicsInternal()
       at System.Windows.Forms.ThreadExceptionDialog..ctor(Exception t)
       at System.Windows.Forms.Application.ThreadContext.OnThreadException(Exception t)
       at System.Windows.Forms.Timer.TimerNativeWindow.OnThreadException(Exception e)
       at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.Run(Form mainForm)
    ****************************************エラー詳細ここまで ****************************************

    " System.ComponentModel.Win32Exception: Error creating window handle. "という
    キーワードを手掛かりに原因を調べたところ、
    ハンドル(PC側で各機能に割り振られる命令番号)を全て使い切ったことが
    最も多い原因であることが分かりました。(ハンドルリーク)

    ハンドルリークの参考url:
    https://social.msdn.microsoft.com/Forums/ja-JP/8210e50e-5fa7-4a24-a778-5774d29f5ea5?forum=vbgeneralja  

    この、ハンドルリークが発生しているか確認するため調査を行ったところ、想定とは異なる結果となりました。

    画面表示ごとに利用されるハンドル数を表示するログを仕込み、ハンドル数の推移を確認しました。
    ハンドル数は増え続けるという想定に反し、実際にはある数字(580辺り)から増えなくなり、
    エラー発生時もハンドル数に急激な上昇は見られませんでした。

    エラー発生時含め、使われたハンドル数はとても低い(1000すら超えない)ため
    ハンドル数を使い切ったことが原因ではないという結論に至りました。

    メモリの圧迫も確認しましたが、メモリも十分残っていました。

    この場合、ハンドル数を使い切った(ハンドルリーク)以外に、上記のエラーが発生する原因として他に何が考えられますでしょうか?

    ※補足情報
    当システムはもともとWIndows7環境で動いており、
    業務端末の更新に伴い、Windows10環境にした後に発生しております。
    win10端末が何かしらの影響を与えているのでしょうか。

    お客様への報告もあり、
    いつまでに回答いただけるかも含め、ご確認いただけると幸いです。

    お手数お掛けしますが
    上記、ご確認のほどお願いいたします。

    2020年8月11日 14:58

すべての返信

  • ウィンドウハンドルが作れない状況も気にかかりますが、呼び出し履歴にある「System.Windows.Forms.ThreadExceptionDialog..ctor(Exception t)」も気になります。

    これは、例外ダイアログを表示しようとしていた形跡であり、その例外ダイアログを作ろうとして二次被害のウィンドウ生成例外が出ていることになるためです。
    Application.ThreadException イベント でログを記録するようにしてみませんか?

    結果として同じ例外が、表示しようとしていた画面で発生しているのかもしれませんが…。
    調査の余地を作り出すためにも、プロセス異常終了時のダンプを残せるように設定しておくべきかもしれません。

    お客様への報告もあり、
    いつまでに回答いただけるかも含め、ご確認いただけると幸いです。

    フォーラムはあくまでコミュニティの有志の回答(助言)にとどまりますので、回答スピード・期限・質・内容などの保証はありませんので、質問者さんの「お客様への報告」という事情に合う進め方とは言えません。
    こういった話をされるのであれば、Microsoft のプレミアサポートを使うなど、業務的な対応をしてくれるサービスを利用してください。
    (ただし、プレミアサポートは数十万~百万支払うぐらいの覚悟は必要です。こういったケース(一問一答に絞りきれない、原因調査を求めるケース)はそれより安価なプロフェッショナルサポートの対象外となります)

    2020年8月11日 21:41
    モデレータ
  • Visual Studio 2008ということですので、.NET Framework 3.5をご利用でしょうか?
    Windows 10にもバージョンがあります。バージョン毎に.NET Framework 3.5の累積更新プログラムが出ていますので、もし何らかの理由で適用されていない場合は、適用されると改善するかもしれません。

    ★良い回答には質問者は回答済みマークを、閲覧者は投票を!

    2020年8月12日 2:19
    モデレータ
  • 脱線しますが、プレミアサポートは案件ごとの問い合わせではなく、年間契約なので、未契約なら質問できませんし、契約済みであれば既に問い合わせ先の候補に挙がっているかなと…。

    # とはいえ、フォーラムの回答としてはやはりプレミアサポートを提案するのが適切でしょうね。

    2020年8月12日 3:20
  • これは確認なんですが、「ハンドル」は主な物でもKERNELハンドル、GDIハンドル、USERハンドルがあります。
    WindowのCreationでエラーになっているので、USERハンドル数(タスクマネージャでは「ユーザー オブジェクト」)と思いますが、その数を調査されたんですよね?

    jzkey

    2020年8月12日 3:24