4

Environment.Exit についての私の最初の信念は次のとおりです。

  1. デフォルトの AppDomain から呼び出された場合、プロセスは終了します。

  2. デフォルト以外の AppDomain から呼び出された場合、AppDomain は終了し、終了コードを AppDomain.ExecuteAssembly のリターンにプッシュします。

https://stackoverflow.com/questionsの受け入れられた回答のように「}」で終了するのではなく、ロードされた AppDomain が Environment.Exit を呼び出してプロセス全体を意図せずに強制終了することは、おそらく望ましくないため、これは私には論理的に思えました。 /3971101/c-sharp-whats-the-the-best-way-to-end-a-programが語っています。

ただし、Environment.Exit のMSDN の説明は次のとおりです。

このプロセスを終了し、基になるオペレーティング システムに指定された終了コードを提供します。

MSDN が言うように、Environment.Exit はプロセス全体を強制終了するのでしょうか、それとも私の当初の想定どおりに機能するのでしょうか?

4

3 に答える 3

3

もちろん、MSDN ライブラリの記事は正確です。いいえ、単に Environment.Exit() を呼び出して、それが機能することを期待することはできません。CAS 要求があります。危険なコードを実行するには、コードが信頼されている必要があります (SecurityPermissionFlag.UnmanagedCode)。通常、完全に信頼されている場合にのみ取得します。

AppDomain でコードをサンドボックス化するのは非常に簡単です。この MSDN ページでその方法を説明しています。

于 2013-02-28T19:48:26.887 に答える
2

これをテストするためのテスト ソリューションを作成しましたが、MSDN は正しいようです。

Environment.Exit がどこからでも呼び出されると、プロセス全体が終了します。そのことを念頭に置いて、 Environment.Exit は、単にアプリケーションを終了するのではなく、コードが実行されているプロセスを強制終了する場合にのみ使用する必要があります。

Environment.Exit を呼び出してアプリケーションを終了すると、AppDomain にソフトウェアをロードする他のアプリケーションで問題が発生する可能性があります。

于 2013-02-28T19:36:04.247 に答える
0

Environment.Exit は理想的には決して使用されるべきではないと思います。使用されている場合、アプリケーションに設計上の問題がある可能性が最も高いです。「.NET プロセス」は、実行中のフォアグラウンド スレッドがなくなると自動的に終了します。メイン スレッドを終了し、他にフォアグラウンド スレッドがない場合、アプリは終了します。すべてのフォアグラウンド スレッドを追跡し、それらを 1 つずつ安全に終了させる方法が必要です。

Environment.Exit に依存する必要がある場合は、問題があります。

于 2013-02-28T19:50:50.783 に答える