2012-05-10 16 views
4

私は多くのスレッドと複雑な静的オブジェクトを持つ大きなアプリケーションを持っています。現在、ユーザーがログアウトすると、アプリケーションは強制的に初期状態にリセットされます。Windowsプロセスを以前の状態にリセットするにはどうすればよいですか?

このプロセスはWindowsサービスに変更されているため、この方法はもはや不可能です。同様に、コードは、ユーザーがログアウトしたときに状態をリセットする方法を適切に実装するには大変混乱しています。

プロセスの初期メモリ全体をディスクに書き込んだ後、リセットが要求されたときにロードするアプローチが考えられるかもしれませんが、カーネルモードの状態を保存できないなど多くの問題があります。

実際にプロセスを再起動せずに、このプロセスを初期状態にリセットする方法(ただし、汚れている)が必要です。 winapiは私のためにこれを達成できる何かを提供しますか?

+0

リセット時に新しいアプリケーションプールを作成し、その中のすべてのオブジェクトを作成することはどうですか? – kenny

+0

あなたが何を示唆しているのか分かっていれば、どこにでもポインタを保存しなくても、アプリケーションニュースは__aロットのオブジェクトになります。彼らはメモリに浮かんで、アプリケーションが終了するまでそのことをやり遂げることを意図しています。これが可能かどうかはわかりません。 –

+0

編集:おっと、私はアプリケーションドメインではないプールを意味しています...アプリケーションドメインを強制終了すると、アプリケーションが終了するようなものです。それがあなたに役立つかどうかは分かりません。それはそれ自身のメモリの '保護された'メモリ、ほとんど完全なプロセスですが、そうではありません。 ;) – kenny

答えて

3

Windowsサービスが別のプロセスで実際の作業を行うことを妨げるものは何もありませんが、それはちょっと面倒です。だから私は、あなたがアプリケーションの状態をリセットする必要があるときはいつでも退出することができる(そして親によって再開される)子プロセスと、サービスとして実装された親プロセスという2つのエクセキュラを持つことをお勧めします。

2

ここではWindowsをお手伝いしません。銀色の弾丸を探すのではなく、自分のコードで問題を解決する必要があります。あなたは、コードがあまりにも適切にユーザーがログアウト時の状態 をリセットする方法を実装するための混乱の多く ある

言います。

これはあなたの唯一の選択肢であるため、再検討する必要があります。

0

現在のロジックをすべてワーカースレッドに移動するだけで、サービスは必要なときにいつでもそのスレッドを生成、終了、再生成することができます。サービスプロセス自体は稼働し続けるでしょう。

+2

サービスを強制的に終了する –

+0

私は何かが欠けていない限り、Windowsがプロセスとして機能するスレッドを生成できるとは思いませんか?自分のメモリとシステムリソースを持つ必要があります。 –

+0

あなたは私がしたい点を忘れてしまったと思います。現在のロジックを新しいサービスprojctに移動しますが、*現在の*アプリケーションのメインスレッドにあったものは、 d。スレッドが起動すると、スレッドは必要なものを割り当て/初期化します。停止すると、必要なものすべてが解放/解放されます。サービスは、ログインを検出したときにそのスレッドの新しいインスタンスを開始し、**ログアウトを検出したときに正常に**そのスレッドを停止することができます。無理矢理終結はせず、別のプロセスもありません。 –

関連する問題