3

更新設定ファイルを作成しています。最初のインストールでは、[UninstallRun]で呼び出されるEXEファイルがあります。アップデートでは、このEXEファイルを完全に削除したいのですが、アップデート後にアンインストールすると、「一部の要素を削除できませんでした」というエラーが常に表示されるようです。

EXEを削除するために、更新中にEXEを削除してみました[InstallDelete]。これによりファイルは削除されますが、アンインストールするとエラーメッセージがスローされます(すべてのファイルが確実に削除されている場合でも)。

アップデートでEXEを置き換えてdeleteafterinstallフラグを使用してみましたが、違いはありませんでした。

何もせずにインストールするだけで、アンインストーラーを実行すると、更新プログラムに[UninstallRun]セクションが含まれていなくても、EXEファイルが呼び出されます。したがって、初期インストールのセットアップファイルがアンインストール部分に使用されているように見えます。

このプロジェクトの目的上、初期インストールを変更することはできないため、更新インストールからすべてを実行する必要があります。セクションに配置された既存のファイルを削除する方法はありますUninstallRunか?

4

1 に答える 1

4

問題は[UninstallRun]、以前のインストールのエントリが既にアンインストール ログに登録されていることです。そのため、単にスクリプトから削除しても有効になりません。また、ファイルを削除すると、デフォルトでそのエラーが生成されます (おそらく)。ファイルが見つからなかったため、必要なアンインストール タスクが実行されませんでした。

RunOnceId元のインストーラーの[UninstallRun]エントリにを付けたことを覚えていますか? その場合は、同じ ID を使用して「置換」エントリを配置できます。exe を指すようにする必要がありますが、no-op にするか、(より良い) 使用Flags: skipifdoesntexistして、削除したものを指すようにすることができます。

を使用しなかった場合RunOnceId、前のエントリをオーバーライドする方法はありません。何もしないダミーのexeファイルを入れるだけです。

于 2012-11-25T09:01:28.290 に答える