Wix's UTIL:CloseApplication拡張機能が機能しないようです
-
24-10-2019 - |
質問
WIXを使用してアンインストールする前にプロセスを閉じようとしています。目に見えるウィンドウがある限り動作することを確認しましたが、目に見えるウィンドウ(システムトレイアプリであるため、このアプリのほとんどの場合)がない場合、アンインストラーがハングしているだけで、最終的にはアンインストールが続き、プロセスが実行されます。
によると このフォーラム投稿, 、Wixが過去に最小化されたアプリを閉じるのに苦労したようですので、これが関連しているのだろうか?
プロセスがシャットダウンされることを確認するために他に何ができるかについての提案はありますか? Win32 APIを使用してアプリでメッセージをキャプチャしようとする方法はありますか?
これが緊密な宣言です:
<util:CloseApplication Id="CloseApp" CloseMessage="yes" Target="App.exe" RebootPrompt="yes" />
そして、これがカスタムアクションです:
<Custom Before="InstallInitialize" Action="WixCloseApplications">REMOVE = "ALL"</Custom>
解決
あなたがスケジューリングしているようです WixCloseApplications
インストールトランザクション前のカスタムアクション。カスタムアクションの仕組みは、実際にアプリケーションを閉じる繰延アクションをスケジュールすることです。トランザクション中に発生しない限り、その動作はできません(After="InstallInitialize"
).
修正はおそらく非常に簡単です。を削除します Custom/@Action="WixCloseApplications"
エレメント。
他のヒント
最初は、参照することを忘れないでください wixutilextension.dll 組み立て。また、確認してください wix 要素にはの定義が含まれています utilextension 名前空間:
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
InstallInitializeの前に、実行するカスタムアクションを変更する必要があることに気付きました。
<Custom Before="InstallInitialize" Action="WixCloseApplications">REMOVE = "ALL"</Custom>
これらの変更を適用し、closeApplications拡張機能が機能しない場合は、インストールプロセスのログを試してみてください
msiexec /i MyApplication.msi /l*v MyLogFile.txt
私もこの問題に直面しました。前の属性を「installValidate」に変更すると、私のために機能しました。
<Custom Before="InstallValidate" Action="WixCloseApplications"/>