2017-09-27 14 views
0

私はアップグレード中にinstallFilesの前に特定のファイルを削除して新しいファイルを戻します。私が気付いているのは、アクションが2回呼び出されたことです。 1.Getを呼び出してファイルを削除します。 2. InstallFilesは新しいファイルを元に戻します。 3.Againが呼び出され、ファイルが削除されます(発生しないでください)。アップグレード中にWixカスタムアクションが2回実行されましたか?

のように私のカスタムアクションが見える - 私はアップグレードのシナリオのため、このカスタムアクションがtwice.I呼び出されることをどこかで読ん

<InstallExecuteSequence> 
      <RemoveExistingProducts After="InstallFinalize" /> 
      <Custom Action="NEWER_VERSION_PRESENT" After="FindRelatedProducts"> 
     NEWER_VERSIONS 
      </Custom> 
      <Custom Action="DeleteourFiles" Before="InstallFiles"></Custom> 
</InstallExecuteSequence> 

は、それが二度目に呼ば取得を防止する方法を知りたいです。基本的に私のカスタムアクションは、新しいファイルを配置する前に、古いバージョンの特定のファイルを削除することを願っています。

答えて

1

古いインストールが削除され、ファイルが削除されています。

<RemoveExistingProducts After="InstallFinalize" /> 

スケジュールは、古いインストーラの実行は、アンインストールとしてインストールを実行しますInstallFinalizeの後にそれをアンインストールします。

<Custom Action="DeleteourFiles" Before="InstallFiles"></Custom> 

条件がないため、インストールやアンインストール、アップグレードのいずれの場合でも常に実行されます。

あなたはそれがインストールし、明示的にアンインストールすると、あなたがあなたのインストール、アップグレード中に

<Custom Action="DeleteourFiles" Before="InstallFiles">NOT UPGRADINGPRODUCTCODE</Custom> 

を追加する必要がありますアップグレード時に実行したい場合は、すでにインストールされています(旧バージョン)インストーラを実行し、UPGRADINGPRODUCTCODEを定義します走りましたそれ自身の製品コードとして。したがって、UPGRADINGPRODUCTCODEが定義されていないときにのみこのカスタムアクションを実行すると言うと、アップグレードインストール時に1回アップグレードして古いものではなく、明示的に製品をアンインストールしたときにも実行されます。

あなたがこれをどのように作成したかにより、以前にリリースされたすべてのインストールをアップグレードする際にも問題は残ります。既存の製品を削除するスケジュールを変更することで、この問題を回避できます。あなたは

<RemoveExistingProducts After="InstallInitialize" /> 

を使用する場合は

それはその倍のDeleteourFilesカスタムアクションを実行している回避すべき代わりに最後の開始時に以前のバージョンをアンインストールします。

言及するもう一つは、私がInstallInitialize後RemoveExistingProductsの再スケジュールした場合、私はまだやる通常あなたは明示的にMajorUpgradeタグ

+0

でこのスケジュールを定義します

通常

のInstallExecuteSequenceタグに「RemoveExistingProductsの」をスケジュールしていないということですカスタムアクションの条件を提供する必要がありますか? –

+0

これは正しい動作である必要があります。現在インストールされている製品のバージョンでは更新された状態が得られないため、RemoveExistingProductsを再スケジュールする必要があります。そのため、アンインストール時にファイルが削除されます。 –