6

アプリケーションのダウングレードを防ぐ方法を探しています。しかし、「問題」は、リビジョン番号を確認する必要があることです

たとえば、1.0.0.1 がインストールされている場合は 1.0.0.2 をインストールできるはずですが、1.0.0.2 がインストールされている場合は 1.0.0.1 をインストールできないはずです。

Element MajorUpgrade は最初の 3 つのトークンのみをチェックすることを知っています。おそらく誰かが私にアイデアを与えることができます、これを行う方法は? これを行うために CustomAction を作成できますか? - はいの場合、どのバージョンをインストールする必要があり、どのバージョンがインストールされているかを CustomAction で確認するにはどうすればよいですか? CustomAction を呼び出す必要がある場所と、メッセージを表示して CustomAction からのインストールを防止するにはどうすればよいですか?

4

2 に答える 2

2

これは一般的な要件です。以下のパターンがよく使われます。

<Upgrade Id="THE-PRODUCT-GUID">
  <UpgradeVersion Property="PREVIOUSVERSIONINSTALLED" Minimum="1.0.0.0" Maximum="$(var.packageVersion)"
          IncludeMinimum="yes" IncludeMaximum="no" MigrateFeatures="yes" />
          IncludeMinimum="yes" IncludeMaximum="yes" />
  <UpgradeVersion Property="NEWERVERSIONINSTALLED" Minimum="$(var.packageVersion)" Maximum="99.0.0.0"
          IncludeMinimum="no" IncludeMaximum="yes" />
</Upgrade>

<InstallExecuteSequence>
  <Custom Action="PreventDowngrading" After="FindRelatedProducts">NEWERVERSIONINSTALLED&lt;&gt;"" AND NOT Installed</Custom>
  <RemoveExistingProducts After="InstallInitialize">PREVIOUSVERSIONINSTALLED&lt;&gt;""</RemoveExistingProducts>
</InstallExecuteSequence>

PreventDowngradingカスタム アクションは本質的に重大なエラーです。

<CustomAction Id="PreventDowngrading" Error="Newer version already installed." />
于 2012-05-06T11:58:48.230 に答える
2

このWIX ウェブサイトのチュートリアルは私にとってはうまくいきました。

要約すると、製品にあるはずの Upgrade タグに UpgradeVersion タグを追加する必要があります。次に、カスタム アクションを追加し、条件付きでスケジュールします - FindRelatedProducts の前に、新しいバージョンが既にインストールされているかどうかをテストします。

コードは次のようになります。

<Product ...>
 <Upgrade Id="YOUR-UPGRADE_GUID">  
  <UpgradeVersion OnlyDetect="yes" Property="NEWERFOUND" Minimum="{CURRENTVERSION}}" IncludeMinimum="no" />
 </Upgrade>
 <CustomAction Id="NoDowngrade" Error="Error Message" />
 <InstallExecuteSequence>
  <Custom Action="NoDowngrade" After="FindRelatedProducts">NEWERFOUND</Custom>
  <RemoveExistingProducts Before="InstallInitialize" />
 </InstallExecuteSequence>
</Product>

CURRENTVERSION を製品のバージョン番号に置き換えます。

于 2012-05-10T15:37:17.767 に答える