2013-08-30 9 views
5

アップグレードのシナリオでのみ実行したいカスタムアクションがいくつかあります。WIXで通常のインストールとアップグレードを区別するにはどうすればよいですか?

私は標準インストール経由で来るとき、私は「MYPROPERTY」とは、例えば、いくつかのプロパティを設定しようとしています...、私はそれらを設定することができ、かつ、次のようにそのXMLの例がある...

<Custom Action="SetMyPropertyToOn" After="exampleActionRuuningBeforeThisOne"> (ENABLEMYPROPERTY_CB) AND (NOT ENABLEMYPROPERTY_CB="0") AND (NOT ENABLEMYPROPERTY) AND (NOT Installed)</Custom> 

通常のインストールで実行されます...アップグレードシナリオでも実行したいと思います。

+0

Aメジャーアップグレードまたはマイナーアップグレード?マイナーアップグレードを実行している場合、Installedがtrueになり、falseに評価されます。 –

答えて

19

私はすべての私のセットアップでこれを使用します。

<SetProperty After="FindRelatedProducts" Id="FirstInstall" Value="true"> 
     NOT Installed AND NOT WIX_UPGRADE_DETECTED AND NOT WIX_DOWNGRADE_DETECTED 
    </SetProperty> 
    <SetProperty After="SetFirstInstall" Id="Upgrading" Value="true"> 
     WIX_UPGRADE_DETECTED AND NOT (REMOVE="ALL") 
    </SetProperty> 
    <SetProperty After="RemoveExistingProducts" Id="RemovingForUpgrade" Sequence="execute" Value="true"> 
     (REMOVE="ALL") AND UPGRADINGPRODUCTCODE 
    </SetProperty> 
    <SetProperty After="SetUpgrading" Id="Uninstalling" Value="true"> 
     Installed AND (REMOVE="ALL") AND NOT (WIX_UPGRADE_DETECTED OR UPGRADINGPRODUCTCODE) 
    </SetProperty> 
    <SetProperty After="SetUninstalling" Id="Maintenance" Value="true"> 
     Installed AND NOT Upgrading AND NOT Uninstalling AND NOT UPGRADINGPRODUCTCODE 
    </SetProperty> 

あなたは、その後、アップグレードでのみ実行するようにカスタムアクションをスケジュールすることができます。

<Custom Action="NameOfCustomAction" Before="InstallFinalize"><![CDATA[Upgrading= "true"]]></Custom> 
+0

ありがとうナタリー、私はこれに1つの小さな問題があります。どういうわけか、私はいつも "FirstInstall"パートに入って、アップグレード時にも残りをスキップしているようです...他の人は常にスキップします。 – Slippy

+0

奇妙なことに、私はそれを経験したことがありません。ログファイルを投稿して助けになるかもしれませんか? –

+4

プロパティWIX_UPGRADE_DETECTEDおよびWIX_DOWNGRADE_DETECTEDは、MajorUpgrade要素が使用されていることを前提としています。ユーザー定義のアップグレードルールには異なるActionProperty名があり、マイナーアップグレードにはこれらの名前はまったくありません。 OPは彼が何をしていたかについて何も言いませんでした。 –

関連する問題