Избегайте перехода к следующему диалоговому окну с условием в установщике WiX - PullRequest
4 голосов
/ 17 ноября 2009

Кто-нибудь знает, можно ли / как остановить установщик MSI на основе WiX для перехода к следующему диалоговому окну при выполнении определенного условия? У меня есть следующий код:

<Dialog Id="SelectIISApplicationPoolUserDialog" Width="370" Height="270" Title="$(var.ApplicationPoolUserDialogTitle)">
  <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.WixUINext)">
    <Publish Property="APPLICATIONPOOLUSER" Value="{}">WEBSITE_APPLICATIONPOOLUSERTYPE = "local"</Publish>
    <Publish Property="APPLICATIONPOOLUSER" Value="1">WEBSITE_APPLICATIONPOOLUSERTYPE = "domain"</Publish>
    <Publish Event="DoAction" Value="CheckPortNumber">1</Publish>
  </Control>

CheckPortNumber относится к этому:

<Binary Id="IISCA" SourceFile="binaries/MyCustomActions.IIS.CA.dll" />
<CustomAction Id="CheckPortNumber" 
              BinaryKey="IISCA" 
              DllEntry="IsFreePort" 
              Execute="immediate" />

Кроме того, где-то еще у нас есть это объявить:

<Publish Dialog="SelectIISApplicationPoolUserDialog" 
         Control="Next" 
         Event="NewDialog" 
         Value="SetSqlServerConnectionDialog">ISPORTFREE</Publish>

Когда я запускаю установщик и попадаю в диалоговое окно для выбора пользователя пула приложений, я нажимаю «Далее». Затем пользовательское действие проверяет номер порта и устанавливает переменную ISPORTFREE. Однако следующий диалог не отображается, независимо от результата ISPORTFREE. Но когда я нажимаю Next еще раз, появляется следующее диалоговое окно.

Итак, что я хочу: когда я нажимаю «Далее» и введенный номер порта используется, я получаю предупреждение и не перехожу к следующему диалогу. Если он не используется, я перехожу к следующему диалоговому окну.

1 Ответ

9 голосов
/ 18 ноября 2009

Вам нужно будет установить Publish/@Order, чтобы все оценивалось в правильном порядке.

Должно работать что-то вроде следующего:

<Publish Dialog="MyDlg" Control="Next" Event="DoAction" 
         Value="SomeAction" Order="1">1</Publish>
<Publish Dialog="MyDlg" Control="Next" Event="SpawnDialog" 
         Value="MyWarningDlg" Order="2">Not CONDITION</Publish>
<Publish Dialog="MyDlg" Control="Next" Event="NewDialog" 
         Value="MyOtherDlg" Order="3">CONDITION</Publish>
...