Проверка пользовательского интерфейса в пользовательском действии WiX переходит в режим сервера/установку

Попытка проверить ввод пользователя в пользовательском диалоговом окне с помощью wix4 (такое же поведение с rc2, rc3 и последними сборками).

Я нашел различные примеры того, как это должно работать, но, к сожалению, я не могу сделать это прямо здесь.

Есть диалоговое окно для выбора папки, устанавливающее свойство следующим образом:

      <Publish Dialog="CustomPropertiesDlg" Control="ChangeFooFolder" Property="_BrowseProperty" Value="FOO_DIR" Order="1" />
<Publish Dialog="CustomPropertiesDlg" Control="ChangeFooFolder" Event="SpawnDialog" Value="BrowseDlg" Order="2" />

затем я пытаюсь запустить проверку, когда пользователь нажимает «Далее»:

      <Publish Dialog="CustomPropertiesDlg" Control="Next" Event="DoAction" Value="UI_CheckFooDir" Order="1" />
<Publish Dialog="CustomPropertiesDlg" Control="Next" Event="NewDialog" Value="InvalidFooPathDlg" Order="2" Condition="FOO_DIR_VALID&lt;&gt;&quot;1&quot;" />
<Publish Dialog="CustomPropertiesDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg" Order="5" Condition="FOO_DIR_VALID=&quot;1&quot;" />

<Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="CustomPropertiesDlg" Order="10" />

На данный момент я ожидаю, что недопустимый каталог установит = "0" (и "1", если это так).

Это тривиальный код:

      [CustomAction]
public static ActionResult VerifyFooPath(Session session)
{
  session["FOO_DIR_VALID"] = "0";
  var fooDir= session["FOO_DIR"];
  session.Log($"Checking whether {fooDir} contains a foo.exe file");
  if (Directory.Exists(fooDir) && File.Exists(Path.Combine(fooDir, "foo.exe")))
  {
    session.Log($"Foo directory accepted as {fooDir}");
    session["FOO_DIR_VALID"] = "1";
  }
  return ActionResult.Success;
}

Тем не менее, несмотря на то, что журнал показывает мне, что пользовательское действие выполняется и устанавливаетFOO_DIR_VALIDсвойство, и хотя пользовательский интерфейс показывает мне диалоговое окно «Нет, путь недействителен». После этого установка переходит прямо к серверной фазе. Если я закрою диалоговое окно (прямая копия стандартногоInvalidDirDlg.wxsс другим сообщением) я хочу, чтобы пользовательский интерфейс оставался там, где он есть. Пусть пользователь исправит ошибку. Тем не менее, он пропускаетVerifyReadyDlg(последний экран) и сразу запрашивает повышение. Что я делаю не так?

Бревно:

      Action start 18:19:30: UI_CheckFooDir.
MSI (c) (F4:04) [18:19:30:414]: Invoking remote custom action. DLL: C:\Users\bla\AppData\Local\Temp\MSI5048.tmp, Entrypoint: VerifyFooPath
MSI (c) (F4:10) [18:19:30:415]: Cloaking enabled.
MSI (c) (F4:10) [18:19:30:415]: Attempting to enable all disabled privileges before calling Install on Server
MSI (c) (F4:10) [18:19:30:415]: Connected to service for CA interface.
MSI (c) (F4!C0) [18:19:30:876]: PROPERTY CHANGE: Adding FOO_DIR_VALID property. Its value is '0'.
Action ended 18:19:30: UI_CheckFooDir. Return value 1.
Action 18:19:30: InvalidFooPathDlg. Dialog created
Action ended 18:19:32: WelcomeDlg. Return value 1.
MSI (c) (F4:34) [18:19:32:623]: Skipping action: MaintenanceWelcomeDlg (condition is false)
MSI (c) (F4:34) [18:19:32:623]: Doing action: ProgressDlg
MSI (c) (F4:34) [18:19:32:623]: Note: 1: 2205 2:  3: ActionText 
Action 18:19:32: ProgressDlg. 
Action start 18:19:32: ProgressDlg.
Action 18:19:32: ProgressDlg. Dialog created
Action ended 18:19:32: ProgressDlg. Return value 1.
MSI (c) (F4:34) [18:19:32:729]: Doing action: ExecuteAction
MSI (c) (F4:34) [18:19:32:729]: Note: 1: 2205 2:  3: ActionText 
Action 18:19:32: ExecuteAction. 
Action start 18:19:32: ExecuteAction.
MSI (c) (F4:34) [18:19:32:735]: PROPERTY CHANGE: Adding SECONDSEQUENCE property. Its value is '1'.
MSI (c) (F4:34) [18:19:32:736]: Grabbed execution mutex.
MSI (c) (F4:34) [18:19:32:736]: Incrementing counter to disable shutdown. Counter after increment: 0
MSI (c) (F4:34) [18:19:32:736]: Switching to server: (snipped properties here)```

1 ответ

Вам нужно;заменяет текущий диалог ивыполнен в виде всплывающего окна. (У него есть только кнопка ОК.)

Другие вопросы по тегам