2012-02-24 7 views
1

さまざまなタスクにいくつかのアウトオブプロセスCOMオブジェクトを使用するアプリケーションがあります。 ユーザがアプリケーションの実行中にWindowsをシャットダウンするように指示した場合、すべてのアプリケーション(最上位ウィンドウ)にシャットダウン通知が送信されますが、OoP COMオブジェクトはシャットダウンされてから親に通知され、さまざまなコンポーネントでさまざまなエラーが発生します。アウトオブプロセスActiveX EXEでのWindowsシャットダウンの処理

これは、不安定なサードパーティオブジェクトをホストするために作成されたOoPオブジェクトの1つで、クラッシュ時に自動的に再起動されるため、Windowsがシャットダウンするときに再起動に失敗するため、悪化します。

親プロセスのエラーを処理することはできますが、ActiveXホストがWindowsに「私はまだシャットダウンしていませんが、間に合うでしょう」と言ったり、Windowsを最初に通知しないでください。

OoPオブジェクトとそのホストの両方の親プロセスは、C++とVB6が混在しています。

+0

ActiveX EXEのコードを所有していますか? – UnhandledExcepSean

+0

ええ、1つはATLのC++、もう1つはVB6プロジェクト – Deanna

答えて

3

これを行うにはいくつかの方法があります。 OOPサーバーは、シャットダウン要求を無視するだけで、クライアントがシャットダウンしてすべての参照カウントを削除することができます。最後のオブジェクトが解放されたときにすぐにシャットダウンすることがわかるように、フラグを設定することをお勧めします。

また、SetProcessShutdownParameters()をOOPサーバーで呼び出すこともできます。 GetProcessShutdownParameters()から1を引いたレベルを渡して、クライアントがサーバーの前に常にシャットダウン通知を取得するようにします。また、Windowsメッセージを取得するために隠されたトップレベルウィンドウを持たないOOPサーバーでも動作します。

+0

うん、面白いと思うけど、トップレベルのウィンドウにはアクセスできないと思うけど、おかげで – Deanna

+0

うわー、それは、ありがとう:) – Deanna

関連する問題