4

.NETの信頼性機能に関するこの記事(およびその他)を読んだことで、次のコードがStackOverflowExceptionsを処理する必要があると思います。

class Program
{
    private static int s_exitCode = -1;

    static int Main(string[] args)
    {
        RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(DoStuff, Cleanup, null);
        return s_exitCode;
    }

    [MethodImpl(MethodImplOptions.NoInlining)]
    static void DoStuff(object userdata)
    {
        DoStuff(userdata);
    }

    [MethodImpl(MethodImplOptions.NoInlining)]
    [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
    static void Cleanup(object userData, bool exceptionThrown)
    {
        s_exitCode = 0;
    }
}

上記のコードをコンソールアプリケーションに配置し、アプリの構成ファイルに次のエントリも含めました。

<runtime>
  <legacyUnhandledExceptionPolicy enabled="1" />
</runtime>

別のアプリケーションからのProcess.Start()呼び出しを介して開始します。ただし、これらすべてにもかかわらず、プロセスがクラッシュし、-2147023895の終了コードが返されます。そして、多くの研究といじくり回しにもかかわらず、私はこれを機能させる方法を見つけることに近づいていません。

どんなアドバイスもありがたく受けました、ありがとう。

クリス。

4

0 に答える 0