Как Вы заставляете Установку Inno не выглядеть замороженной при выполнении длинного Должностного лица?

Вы не можете сделать это с помощью Read-Host, но вы можете сделать это с помощью модуля PSReadLine (поставляется с Windows PowerShell версии 5 или выше в Windows 10 / Windows Server 2016) и PowerShell Core) и его PSConsoleHostReadline функция:

Важно:

  • Начиная с PSReadLine v2.0.0-beta3, решение ниже является hack , потому что PSConsoleHostReadline поддерживает запрос только для операторов PowerShell , а не для открытого пользовательского ввода.

    • В этом предложении функции GitHub запрашивается возможность использования функции для пользовательского ввода общего назначения, что позволило бы в значительной степени настраивать взаимодействие с конечным пользователем. Сделайте так, чтобы ваш голос был услышан там, если вы хотите, чтобы это предложение было реализовано.
  • Хак должен работать в вашем случае , поскольку имена пользователей, для которых вы запрашиваете, должны быть синтаксически допустимыми операторами PowerShell.

    • Однако поддержка произвольного ввода проблематична по двум причинам:

      • Будет применена не применимая раскраска синтаксиса - однако вы можете временно установить для всех настраиваемых цветов значение того же цвета, но это было бы громоздко.

        li>
      • Что еще более важно, если входные данные являются чем-то, что составляет синтаксически неполное выражение PowerShell, [115 ] не примет ввод и вместо этого продолжит запрашивать (в новой строке); например, ввод a| вызовет эту проблему.

        li> ul>
    • Также:

      • [ 1134] Независимо от того, что вводится, он всегда добавляется в историю команд .

      • Хотя вы можете удалить временно установленный обработчик клавиатуры при выходе из скрипта, нет надежного способа восстановить ранее активный - см. это Выпуск GitHub .

     # Set up a key handler that cancels the prompt on pressing ESC (as Ctrl-C would).
     Set-PSReadLineKeyHandler -Key Escape -Function CancelLine
    
     try {
    
       # Prompt the user:
       Write-Host -NoNewline 'Enter account name you wish to disable: '
       

    Вы не можете сделать это с помощью Read-Host, но вы можете сделать это с помощью модуля PSReadLine (поставляется с Windows PowerShell версии 5 или выше в Windows 10 / Windows Server 2016) и PowerShell Core) и его PSConsoleHostReadline функция:

    Важно:

    • Начиная с PSReadLine v2.0.0-beta3, решение ниже является hack , потому что PSConsoleHostReadline поддерживает запрос только для операторов PowerShell , а не для открытого пользовательского ввода.

      • В этом предложении функции GitHub запрашивается возможность использования функции для пользовательского ввода общего назначения, что позволило бы в значительной степени настраивать взаимодействие с конечным пользователем. Сделайте так, чтобы ваш голос был услышан там, если вы хотите, чтобы это предложение было реализовано.
    • Хак должен работать в вашем случае , поскольку имена пользователей, для которых вы запрашиваете, должны быть синтаксически допустимыми операторами PowerShell.

      • Однако поддержка произвольного ввода проблематична по двум причинам:

        • Будет применена не применимая раскраска синтаксиса - однако вы можете временно установить для всех настраиваемых цветов значение того же цвета, но это было бы громоздко.

          li>
        • Что еще более важно, если входные данные являются чем-то, что составляет синтаксически неполное выражение PowerShell, [115 ] не примет ввод и вместо этого продолжит запрашивать (в новой строке); например, ввод a| вызовет эту проблему.

          li> ul>
      • Также:

        • [ 1134] Независимо от того, что вводится, он всегда добавляется в историю команд .

        • Хотя вы можете удалить временно установленный обработчик клавиатуры при выходе из скрипта, нет надежного способа восстановить ранее активный - см. это Выпуск GitHub .

      [110]Name = PSConsoleHostReadLine # If ESC was pressed,

      Вы не можете сделать это с помощью Read-Host, но вы можете сделать это с помощью модуля PSReadLine (поставляется с Windows PowerShell версии 5 или выше в Windows 10 / Windows Server 2016) и PowerShell Core) и его PSConsoleHostReadline функция:

      Важно:

      • Начиная с PSReadLine v2.0.0-beta3, решение ниже является hack , потому что PSConsoleHostReadline поддерживает запрос только для операторов PowerShell , а не для открытого пользовательского ввода.

        • В этом предложении функции GitHub запрашивается возможность использования функции для пользовательского ввода общего назначения, что позволило бы в значительной степени настраивать взаимодействие с конечным пользователем. Сделайте так, чтобы ваш голос был услышан там, если вы хотите, чтобы это предложение было реализовано.
      • Хак должен работать в вашем случае , поскольку имена пользователей, для которых вы запрашиваете, должны быть синтаксически допустимыми операторами PowerShell.

        • Однако поддержка произвольного ввода проблематична по двум причинам:

          • Будет применена не применимая раскраска синтаксиса - однако вы можете временно установить для всех настраиваемых цветов значение того же цвета, но это было бы громоздко.

            li>
          • Что еще более важно, если входные данные являются чем-то, что составляет синтаксически неполное выражение PowerShell, [115 ] не примет ввод и вместо этого продолжит запрашивать (в новой строке); например, ввод a| вызовет эту проблему.

            li> ul>
        • Также:

          • [ 1134] Независимо от того, что вводится, он всегда добавляется в историю команд .

          • Хотя вы можете удалить временно установленный обработчик клавиатуры при выходе из скрипта, нет надежного способа восстановить ранее активный - см. это Выпуск GitHub .

        [110]Name will contain the empty string. # Note that you won't be able to distinguish that from the user # just pressing ENTER. $canceled =

        Вы не можете сделать это с помощью Read-Host, но вы можете сделать это с помощью модуля PSReadLine (поставляется с Windows PowerShell версии 5 или выше в Windows 10 / Windows Server 2016) и PowerShell Core) и его PSConsoleHostReadline функция:

        Важно:

        • Начиная с PSReadLine v2.0.0-beta3, решение ниже является hack , потому что PSConsoleHostReadline поддерживает запрос только для операторов PowerShell , а не для открытого пользовательского ввода.

          • В этом предложении функции GitHub запрашивается возможность использования функции для пользовательского ввода общего назначения, что позволило бы в значительной степени настраивать взаимодействие с конечным пользователем. Сделайте так, чтобы ваш голос был услышан там, если вы хотите, чтобы это предложение было реализовано.
        • Хак должен работать в вашем случае , поскольку имена пользователей, для которых вы запрашиваете, должны быть синтаксически допустимыми операторами PowerShell.

          • Однако поддержка произвольного ввода проблематична по двум причинам:

            • Будет применена не применимая раскраска синтаксиса - однако вы можете временно установить для всех настраиваемых цветов значение того же цвета, но это было бы громоздко.

              li>
            • Что еще более важно, если входные данные являются чем-то, что составляет синтаксически неполное выражение PowerShell, [115 ] не примет ввод и вместо этого продолжит запрашивать (в новой строке); например, ввод a| вызовет эту проблему.

              li> ul>
          • Также:

            • [ 1134] Независимо от того, что вводится, он всегда добавляется в историю команд .

            • Хотя вы можете удалить временно установленный обработчик клавиатуры при выходе из скрипта, нет надежного способа восстановить ранее активный - см. это Выпуск GitHub .

          [110]Name -eq '' # ... act on potential cancellation } finally { # Remove the custom Escape key handler. Remove-PSReadlineKeyHandler -Key Escape }

6
задан Davy8 26 February 2009 в 19:24
поделиться

3 ответа

Мы должны были установить.NET с парой продуктов и проявили два подхода:

  • При установке.NET с Innosetup мы позволяем пользователю знать, что установка займет много времени, и ожидать определенное сообщение, когда это будет завершено
  • Мы запускаем набор.NET без любых флагов для принуждения клиента через него. Таким образом, если они более технически наклонены, они знают, почему установка занимает много времени

У нас честно была лучшая удача с 2-й опцией, особенно теперь, когда больше системных администраторов, кажется, блокирует вниз рабочие столы до известной степени.

0
ответ дан 9 December 2019 в 22:40
поделиться

Хотя это, вероятно, было бы легко, я не рекомендую скрыть Ваш установщик, в то время как установщик .NET работает. Я видел, что другие установщики делают это, и когда это происходит, я думаю, что установка закончена, и затем я смущен, когда я нахожу, что это действительно нет. (И когда установка действительно закончена, я не могу быть уверен в этом, также. Возможно, это просто спряталось снова.)

Можно отобразить пользовательские страницы в Мастере установки Inno. Создание такой страницы показать индикатор выполнения и хранение ее точный, вероятно, были бы проблемой, но по крайней мере Вы могли отобразить сообщение на странице мастера, говоря, что Ваш установщик ожидает установщика .NET перед продолжением. Посмотрите раздел "Using Custom Wizard Pages" справочного файла.

2
ответ дан 9 December 2019 в 22:40
поделиться

Можно просто скрыть форму мастера установщика путем вызова

WizardForm.Hide;
Exec(...);
WizardForm.Show;

хотя я соглашаюсь, что это не действительно симпатично.

2
ответ дан 9 December 2019 в 22:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: