2013-08-30 71 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

重大升級或次要升級?如果你正在做一個小升級,那麼Installed將是正確的,這將被評估爲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

謝謝娜塔莉,我只有一個小問題。不知何故,我似乎總是進入「FirstInstall」部分,然後跳過其餘部分,即使在升級時......其他人總是跳過。 – Slippy

+0

奇怪的是,我從來沒有經歷過。你可以發佈你的日誌文件,也許這將有助於? –

+4

屬性WIX_UPGRADE_DETECTED和WIX_DOWNGRADE_DETECTED假定使用了MajorUpgrade元素。用戶定義的升級規則可能具有不同的ActionProperty名稱,次要升級根本沒有這些名稱。 OP沒有說他正在做什麼樣的升級。 –