3

インストールに WIX を使用する製品があります。これは私のインストールシーケンスです:

<InstallExecuteSequence>
   <RemoveExistingProducts Before="InstallInitialize" />
</InstallExecuteSequence>

私が理解しているように、再インストール時に古いバージョン全体が削除されます。これは私が保持したい動作ですが、古いバージョンから特定のファイルをコピーしたいとも考えています。

どうすればいいのですか?

4

1 に答える 1

1

昇格された特権を必要とするRemoveExistingProductsの前にカスタムアクションを実行できないため、新しいMSIの展開から必要なことを行うことはほとんど不可能です(これは、prgramファイルのようなUAC制御フォルダーにインストールしていない場合は機能する可能性があります-しかし、私はそれを試したことはありません)。

回避策の1つは、ブートストラッパーを作成して既存のMSIを変更することです(これが機能するかどうかはわかりません)–この質問の回答を参照してください:WiXでAfter="InstallValidate"を使用してRemoveExistingProductsの前にカスタムアクションを実行する方法

過去にインストーラーを作成したことがある場合は、アンインストール時にファイルを一時フォルダーにコピーするカスタムアクションを作成し(アップグレードすると、以前のバージョンのMSIのアンインストールが新しいMSIによって呼び出されます)、検査するだけです。新しいMSIがインストールされたら、このフォルダをクリアします(アップグレード部分)。このアプローチでは、アンインストールするだけで(アップグレードではなく)多くのファイルが残りますが、私は構成ファイルにのみ関心があるため、これは実際には非常にうまく機能し、顧客が戻ってきた場合でもすべての構成が失われることはありません。

もちろん、これは当面の問題を解決するものではありません。アンインストール時に関連ファイルをバックアップするバージョンが配布された後にのみ機能し始めますが、過去3年間はうまく機能しています。

HTH

于 2013-02-20T09:02:18.200 に答える