WiX でインストーラーを作成しました。インストールが完了すると、Explorer プロセスにコードを挿入するアプリケーションが開始されます。
現在、アンインストールすると、再起動マネージャーが起動し、アプリケーションとエクスプローラーをシャットダウンするよう提案されます。その代わりに、アプリケーションを手動で閉じたいです (これは、コマンド ラインで -exit を使用して再度実行することによって行われます)。それを行うカスタムアクションがあります。
これが私がこれまでに試したことです:
<CustomAction ExeCommand="-exit" FileKey="MyApp.exe" Id="CloseMyApp" Impersonate="yes" Return="ignore" />
<InstallExecuteSequence>
<RemoveExistingProducts After="InstallInitialize" />
<Custom Action="CloseMyApp" Before="RemoveFiles" />
</InstallExecuteSequence>
これはうまくいきません。アクションは、Restart Manager セッションの後に行われます。そのため、再起動マネージャーがポップアップし、アプリとエクスプローラーを閉じるように求められます。アクションは後で実行されますが、それまでにアプリは既になくなっています。
それで、私はこれを試しました:
<InstallExecuteSequence>
<RemoveExistingProducts After="InstallInitialize" />
<Custom Action="CloseMyApp" Before="RemoveExistingProducts" />
</InstallExecuteSequence>
これも機能しません。アクションはまだ遅すぎます。また、「警告 LGHT1076 : ICE63: 一部のアクションが InstallInitialize と RemoveExistingProducts の間にあります。」というメッセージも表示されます。
基本的に、アンインストール中および再起動マネージャー セッションの前にカスタム アクションを実行するにはどうすればよいですか?
Impersonate="no" を使用すると、適切なタイミングで実行される可能性があると思いますが、それはオプションではありません。これは、ウィンドウを検索してメッセージを送信するために閉じる必要があるプロセスと同じユーザーに対して、新しいプロセスを実行する必要があるためです。プロセスが異なるユーザーに属している場合、これを行うのは非常に困難です。
何か案は?