WIX の CloseApplication 機能は何をするのか、アプリケーションはそのような信号にどのように応答するのか
-
26-09-2019 - |
質問
私が入手した WIX セットアップでは、アプリケーションをアップグレードするときに、更新する必要があるファイルを保持している可能性のあるアプリケーションを閉じるという要件を設定しました。
<util:CloseApplication
Id="CloseMyApp"
Target="[MyAppExe]"
CloseMessage="yes"
Description="!(loc.MyAppStillRunning)"
RebootPrompt="no"
ElevatedCloseMessage="no"
/>
一方、アプリケーションは、ユーザーがアプリケーションを閉じたいかどうかを確認できる「ユーザーフレンドリーな」ダイアログボックスでウィンドウを閉じることをキャプチャします。
インストーラーが CloseApplication を実行すると、アプリケーションを停止する必要があることがわかりますが、アプリケーションを閉じることができません。1 つの理論では、ダイアログ ボックスがアプリケーションの終了を妨げるというものです。
そこで質問は次のとおりです。これは考えられる問題でしょうか?その場合、インストーラーがアプリケーションを閉じるように要求したときに、この確認ダイアログ ボックスを表示しながら適切に動作させるにはどうすればよいでしょうか?Win32 メッセージ (WM_QUIT/WM_CLOSE など) をリッスンする必要がありますか? それとも、これらのイベントに適切に応答するために使用できる .NET API はありますか?
アップデート: によると メーリングリスト, CloseApplication はアプリケーションに WM_CLOSE を送信します。ユーザーがアプリを閉じた場合と閉じた場合では動作が異なるという問題がまだあります。WIX から送信される終了メッセージ。アプリケーションが終了するさまざまなソースをどのように特定できるかわかりません。
解決 2
、私が取得します。そのクロージングイベントで私は、WindowクラスのIsFocusedプロパティのチェックを行います。場合は、この返し偽、私はすべてのユーザーに確認せずにアプリケーションを終了します。
他のヒント
あなたのアプリケーションは、あなたのメインフォームの「閉じる」のイベントとして、あなたの.NETアプリで表面化すべきWM_CLOSEを取得する必要があります。これを処理する際に、あなたは、任意のアクティブをチェックするためのWin32 API GetLastActivePopup に使用することができますあなたが開いていると、必要に応じてそれらを閉じ、ダイアログボックスます。
あなたは、タスクマネージャを開いて、アプリケーションの「プロセスの終了」を実行して、実装をテストすることができます。それはWiXのはおそらく行っているものと同様の方法を用いて、第1の優しいシャットダウンを実行しようとします。