2016-03-17 3 views
0

Wix фрагмента: Я устанавливаю свойство FEATURE_IS_SELECTEDWix, установив пользовательское свойство истины не работаешь

<SetProperty Id="FEATURE_IS_SELECTED" Value="1" After="InstallFiles" Sequence="execute"><![CDATA[&MyFeature=3]]></SetProperty> 

затем вызывая настраиваемое действие:

<Custom Action="ConfigureMyXml" Before="InstallFinalize">NOT Installed OR MaintenanceMode="Modify"</Custom> 

Пользовательских действия:

public const string IsFeatureSelected = "FEATURE_IS_SELECTED"; 

[CustomAction] 
    public static ActionResult ConfigureMyXml(Session session) 
    { 
     string value; 
     MessageBox.Show("I will check if value is set"); 
     if (session.CustomActionData.TryGetValue(IsFeatureSelected, out value)) 
     { 
      //do sth here 
     } 

     return ActionResult.Success; 
    } 

При отладке это действие вызывается, но условие if не соответствует действительности. Почему FEATURE_IS_SELECTED не установлен? и // do sth здесь не выполняется?

ответ

0

Настроенное пользовательское действие не отмечено значением «выполнить», поэтому значение по умолчанию является немедленным. Это означает, что CustomActionData не участвует в получении значения. Тем не менее, похоже, что вы хотите изменить установленный файл, поэтому единственное изменение, которое вам нужно, - это пометить CA как выполненный отложенный, так что он запускается после фактического установки файлов, а затем вам также потребуется отдельное настраиваемое действие для подготовки CustomActionData , так как здесь:

How to pass CustomActionData to a CustomAction using WiX?

Ваша последовательность может быть немного подозреваемый - вы можете установить FEATURE_IS_SELECTED в любое время после CostFinalize, и это может быть немедленным. Настройка Xml может быть лучше «после установки файлов».

+0

Пользовательские действия не должны откладываться для запуска после установки файлов. Ему просто нужно установить After = "InstallFinalize" –