2011-12-22 2 views
3

Я определил несколько пользовательских действий в моей настройке WIX, и эти действия вызывают сторонние EXE, от которых зависит наше приложение. Пользователь решает установить или игнорировать эти сторонние приложения из дерева функций. Мой CustomAction и бинарные теги выглядеть следующим образом:Последовательность пользовательских действий WIX

<CustomAction Id='NL220_Action' BinaryKey='NL220EXE' Return='asyncWait' /> 
<Binary Id="NICEXE" SourceFile="..\NL220.exe" /> 

<CustomAction Id='NIC_Action' BinaryKey='NICEXE' Return='asyncWait' /> 
<Binary Id="NICEXE" SourceFile="..\NIC.exe" /> 

Кроме того, мой InstallExecuteSequence тег выглядит следующим образом:

<InstallExecuteSequence> 
    <Custom Action="NL220_Action" After="InstallFinalize"><![CDATA[(&Optional_NL220=3)]]></Custom> 
    <Custom Action="NIC_Action" After="NL220_Action"><![CDATA[(&Optional_NIC=3)]]></Custom> 
</InstallExecuteSequence> 

Все работает отлично: пользователь может выбрать третий участник программы установки пакетов для запуска, и эти затем запускаются при завершении установки. Проблема заключается в том, что если пользователь выбирает оба сторонних установщика, они запускаются одновременно, игнорируя атрибут After = "NL220_Action" второго пользовательского действия. Есть идеи, почему это так?

ответ

2

По состоянию на Custom Action Return Processing Options, ожидание asyncWait происходит в конце последовательности. Использование этого значения означает, что вам нужно, чтобы действие было успешным, но вам все равно, когда он преуспеет. Если он ждал, когда пользовательское действие завершится до продолжения вперед, оно будет синхронным. Если вам нужно дождаться завершения первого перед запуском второго, то либо вам нужно сделать первое действие синхронным, либо, возможно, объединить оба действия в одно асинхронное действие, которое само выполняет два под-действия в упорядоченной последовательности.

+0

Было моим пониманием, что атрибут return определяет взаимосвязь между основным потоком и пользовательскими потоками действий (таким образом, асинхронно запускается пользовательское действие с основным потоком). Я изменил возвращаемое значение на «проверку», и это работает, как и ожидалось, благодаря Майклу. – staterium

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