7

Windows Installer XML 3.0 (WIX3) を使用してソフトウェアをインストールしています。

すべて正常に動作しますが、ユーザーがアンインストールしようとしたときに、インストールされたソフトウェアがまだ実行されているというユースケースを処理するのに非常に苦労します。デフォルトの動作では、すべてのファイルが削除されるように見えますが、アプリケーションは実行されます (タスク トレイにあるため、私の場合はわかりにくいです)。

installer.wxsファイルに次のコードを追加しました。

<InstallExecuteSequence>
  <Custom Action="WixCloseApplications" Before="RemoveFiles" />
</InstallExecuteSequence>

<util:CloseApplication Id="CloseFoobar"
                       CloseMessage="no"
                       Description="FooBar is still running!"
                       ElevatedCloseMessage="no"
                       RebootPrompt="no"
                       Target="foobar.exe" />

しかし、これは機能しません。さらに悪いことに、インストール中に再起動を求めるダイアログが表示されます。

それを行う正しい方法は何ですか?

4

6 に答える 6

7

私が覚えている限りでは、UI に次の参照を追加するだけで十分です。

<DialogRef Id="FilesInUse" />
<DialogRef Id="MsiRMFilesInUse" />

CloseApplication は、インストール中にアプリケーションを閉じるためだけのものですが、バグがあります (少なくとも数か月前に試したときは、修正されたのでしょうか?)

残念ながら、これは WiX の非常に貧弱なドキュメントの例であり、このような標準的なインストール/アンインストールのシナリオでさえドキュメント化されていません。

于 2009-04-02T17:12:07.593 に答える
1

There was a similar question asked on the wix-users mailing list a couple of days ago. The answer given there was:

This is the way that Windows works pre-Vista and Restart Manager. There has to be a top-level window available. An app in the tray doesn't count.

There are a few threads on the topic in the wix-users archive as well.

于 2009-04-02T22:39:26.853 に答える
0

シェイの答えは正しいです。最近のバージョンの Windows インストーラーは、このように動作します。Windows インストーラーは、使用中の Dll を再マッピングするなどして、アンインストール時の再起動を回避できるようにするために多くの問題を抱えています。一般に、実行中のアプリはアンインストール後も実行を継続できます。シャットダウンし、残りは次の再起動後に行います。要点は、Windows インストーラーが使用中のバイナリを別の場所に移動し、アプリを実行したままにし、使用していたものを置き換え (ただし、メモリ バッキングは再マップされます)、不要なジャンクを少し削除するだけでよい場合です。次回の再起動時に、なぜ再起動を強制するのですか? 使用中のファイルのダイアログを表示する必要がないため、そのような状況は発生しません。

これにより、アプリがアンインストールされたファイルにアクセスしようとすると問題が発生する可能性がありますが、リスクは低いと考えられます。アプリがアンインストールが進行中であることを知る必要がある場合、Restart Manager との統合が機能するはずです。Windows は、アンインストールが進行中であることを通知します。そうでなければ、シェイは正しいです。必要に応じて、アプリを終了するように指示するアンインストール カスタム アクションを記述します。

于 2015-05-20T17:18:22.837 に答える
0

アンインストール ログを確認できますか (ログを有効にする方法は次のとおりです)。私が覚えている限り、Windows インストーラーはファイルを削除保留状態にし、最後に再起動を要求します。
また、プロセスを強制終了する単純なカスタム アクションを作成することもできます。

于 2009-04-03T06:39:44.547 に答える