シャットダウン中に問題が発生します。C++ で記述されたコードが .dll にラップされ、他のアプリケーションに挿入されています。C# で記述された別のアプリケーション (サーバー) の起動など、さまざまな処理を行います。
ただし、シャットダウンが開始された後、C++ コードは C# アプリケーションを起動します。これは、システムがシャットダウンしようとしているためにすぐにクラッシュするシャットダウンによって強制終了されたためです。
次に、エラー ボックスが表示され、ユーザーが対処するまでシャットダウンが中断されます。これは面倒です。OSに「シャットダウン/再起動/ログアウトしていますか?」と尋ねる方法はありますか? それが起こっている間、私はアプリケーションを起動しませんか?どちらか一方の解決策で問題ないと思います。
==編集==
もう少し明確にするために。注入された .dll として実行されているコードは、注入されたアプリケーションに何らかの種類の「ウィンドウ」があると想定できません。また、タイミングによってイベントを見逃す可能性があるため、リッスンする必要があるイベントではなく、クエリできるものが欲しいです。このようなものを効果的に与える関数があるかどうか疑問に思っています
bool IsSystemShutting();
この点で、C#オプションはC++オプションと同様に機能します。しかし、.NET フレームワークでは、SystemEvents.SessionEndingとSystemEvents.SessionEndedはどちらもイベントとプロパティです。イベントが発生した後にこのイベントにサインアップすることがよくあるので、それは私には何の役にも立たない.