Windows Server 2003 Enterprise Edition Service Pack 2 テスト マシンにインストールした場合にのみ断続的な StackOverFlow 例外をスローするスタンドアロン コンソール アプリを作成しました。
ソース コードは C# VS 2010 です。ソース コードに
は再帰呼び出しはありませんが、ワーカー スレッドを使用しています。
StackOverflowException が発生しても、実行中のプロセスは終了しません。
例外が発生すると、一貫して同じ場所で発生します。
例外が発生する場合、ほとんどの場合、コードが COM 境界を越えて初期化しようとしているときに発生します。つまり、CAsset asset = new CAsset() CAsset は C++ で記述された COM オブジェクトです。
直接の初期化を System.Activator.CreateInstance の呼び出しに置き換える
System.Type assetType = System.Type.GetTypeFromProgID("GDMTCommon.HansenAsset");
object activated = System.Activator.CreateInstance(assetType);
asset = activated as CHansenAsset;
問題は解決しませんが、障害点をコード内の別の場所に移動します。また、上記のコードはエラーをスローしませんが、アセット変数は直接キャスト後に null になります。このインスタンスは、COM オブジェクトの初期化でエラーが発生しない 1 回です。
最も不可解な動作は、テスト マシン上の 2 つの異なるソース データ セットに対してツールを実行できることです。一方のソース データ セットでは、コードはエラーなしで完了するまで実行され、もう一方のセットではコードは失敗します。
2 台の異なる Windows 7 テスト マシンに同じツールをインストールしましたが、どちらのマシンでもエラーを再現できませんでした。Windows Server 2003 Standard Edition Service Pack 2 テスト マシンにもツールをインストールしましたが、そのマシンでエラーを再現できませんでした。
Windows Server 2003 にインストールすると、ある OS で動作するコードが StackOverflowExceptions をスローし始めるという他のいくつかの質問が多数の検索で見つかりましたが、決定的な解決策は見つかりませんでした。
私の問題を説明していると思われるナレッジ ベースの記事を見つけました:
http://support.microsoft.com/kb/915750
しかし、この記事によると、問題は Service Pack 2 で修正されており、Service Pack 2 がインストールされていることを確認しました。テストマシンで。
どんな援助でも大歓迎です。
よろしく、
ジェイ