2015-07-06 2 views
1

В моем управляемом бутстрапере я попытался вызвать Engine.EvaluateCondition («MY_PROG_FOUND»); в методе Run(). Но он никогда не оценивает и не говорит что-то вроде: «Для этого нужен потомок». и он никогда не оценивает.wix Managed Bootstrapper: Engine.EvaluateCondition() требует отдельной темы?

Я пытаюсь оценить условия Bundle в моем управляемом загрузчике, но все равно не повезло.

MY_PROG_FOUND определяется в расслоении код:

<util:RegistrySearch Id="PETRELINSTALLLOCATION" 
     Variable="MY_PROG_FOUND"      
     Root="HKLM" 
     Key="SYSTEM\CurrentControlSet\Control\Session Manager\Environment"  
     Value="$(var.my_prog_env_var)" 
     Result="exists" 
    /> 

    <bal:Condition Message="[WixBundleName] required the installation of My Program."> 
     <![CDATA[Installed OR (MY_PROG_FOUND)]]> 
    </bal:Condition> 

Как я могу использовать Engine.EvaluateCondition() в управляемом загрузчике? Требуется ли это для вызова в конкретном случае, например DetectBegin()?

Любая помощь была бы действительно оценена ... Спасибо, кучка.

ответ

3

Позже я понял, что отдельный поток активен во время вызовов. Поэтому я пробовал это во время DetectComplete Событие, и это сработало.

Но перед этим мне пришлось разобрать файл BootstrapperApplicationData.xml, чтобы получить элементы WixBalCondition и получить коллекцию в массив, например. BalConditions [].

Вот мой фрагмент кода:

void BootstrapperApplication_DetectComplete(object sender, DetectCompleteEventArgs e) 
      { 
       string balCondtionMessages = string.Empty; 
       bool balConditionStatus = true; 
       foreach (var balCondition in bootAppData.BundleData.BalConditions) 
       { 
        if (!model.BootstrapperApplication.Engine.EvaluateCondition(balCondition.Condition)) 
        { 
         balConditionStatus = false; 
         if (!String.IsNullOrEmpty(balCondtionMessages)) 
         { 
          balCondtionMessages = balCondtionMessages + '\n' + "- " + balCondition.Message; 
         } 
         else 
          balCondtionMessages = "- " + balCondition.Message; 
        } 


       } 

       if (!balConditionStatus) 
       { 
       SetbalConditionMsg(balCondtionMessages); 
       }  
     } 

Это заставляет нас анализировать все условия в нашем коде Bundle.wxs, оценить их и отобразить сообщение, относящееся в нашей пользовательской Bootstrapper UI.

Смежные вопросы