C#で作成したプログラム foo.exe をずーっと実行させていると
1ヵ月〜2ヵ月ぐらいで、
Execption of the System.OutOfMemory Exception was throw
というダイアログメッセージが出力されます。
ダイアログの詳細を見ると、mscorlib.dll で上記の例外が発生している様子です。

この時のシステムの状態は、Ctrl+ALT+DELでタスクマネージャーを起動しようとしても、
「アプリケーションを正しく初期化出来ませんでした 0xc000012d」
といった感じで、タスクマネージャも起動できません。
また、スタートメニューのアイコンが表示されなかったり、他のアプリケーションの起動も出来ません。

foo.exe をウィンドウメニューの×をクリックして終了させても、状況は変わりません。

foo.exeがメモリリークしているのであれば、foo.exeを終了させれば、その状態は回復する
と思っているんですが、foo.exe を終了させているにも係わらず、タスクマネージャが起動出
来ない状況が変わらないため、何が起きているんだろうと、途方にくれています。

一旦この状態になったら、ウィンドウメニューの×でfoo.exeを終了させても、
メモリはシステムに返されない状態になってしまっているんでしょうか?

それとも、foo.exeを終了させたつもりになっているだけで、実際?は、終了していないんでしょうか?

また、こういった状況を調査するためには、なにを調べれば良いでしょうか。

すいませんが、知恵をお貸しください。

環境は、
WindowsXP SP2
.NET Framework 1.1 Hotfix(KB928366)
です。