2013-02-05 9 views
6

シャットダウン中に発生する問題があります。私は、C++で書かれたコードを.dllでラップし、他のアプリケーションに注入しています。それは、C#で書かれた別のアプリケーション(サーバー)を開始することを含め、たくさんのことを行います。Windows C++またはC#では、現在シャットダウン/再起動/ログオフしている場合にOSに問い合わせることができます

シャットダウンが開始されると、シャットダウンによってシステムがシャットダウンされるため、シャットダウンによってシステムがクラッシュするため、C++コードはC#アプリケーションを起動します。

エラーボックスは、ユーザーがそれを処理するまでシャットダウンを停止します。これは迷惑です。 OSに質問する方法はありますか "やあ、シャットダウン/リブート/ログアウトしていますか?"それが起こっている間、私はアプリケーションを起動しませんか?私はいずれかの端に解決策が良いと思う。もう少し明確にするため

== EDIT ==

。注入された.dllとして実行されているコードは、注入されたアプリケーションに「ウィンドウ」の種類があると想定できません。また、私は質問することができますが、タイミングのためにそのイベントを逃す可能性があるので、私が聞く必要があるイベントではありません。効果的にこの

bool IsSystemShutting(); 

好きで、私のために働くだろうC#のオプションでは、この点だけでなく、C++オプションに私に何かを与える機能の任意の並べ替えがある場合、私は思ったんだけど。しかし.NETフレームワークでは、SystemEvents.SessionEndingSystemEvents.SessionEndedは両方のイベント対プロパティです。イベントが発生した後に私はこのイベントにサインアップすることが非常に頻繁にあります。

答えて

4

WM_ENDSESSIONWM_QUERYENDSESSIONのメッセージは、このシナリオのためのものです。 Windowsは、シャットダウン、再起動、またはログオフプロセスが開始されると、これらのウィンドウメッセージをウィンドウに送信します。

+1

これは私にとってはうまくいくとは思えません。このメッセージをキャプチャするためにコールバックをセットアップする必要があるようです。私のコードは別のアプリケーションに組み込まれているので、このメッセージをトラップでき、受信できない可能性があります。私は本当にOSがシャットダウンしているときに言いたくないので、自分のスケジュールで質問したい。それが可能か、この呼び出しが唯一の方法です。また、私はウィンドウを持たないプロセスに常駐しています。これはこの方法に問題がありますか? – Ultratrunks

+0

隠しウィンドウを生成し、その2つのメッセージを使用してシャットダウン状態を共有メモリに保持するスタブシングルトン実行可能ファイルをいつでも作成できます。そのスタブは、コアアプリケーションの最初のインスタンスによって生成されます。次に、アプリケーションは、スタブシングルトンの共有メモリを調べることによって、シャットダウン状態を問い合わせることができます。それは書くのが最も簡単なコードではありませんが、うまくいくでしょう。 – syazdani

関連する問題