Как заставить установщика приостановить/разрешить проверку?

Я создаю установщик, который в настоящее время создает новый веб-сайт в IIS, создает пул приложений, а затем назначает этот пул веб-сайту. Я создал специальное действие для этого, и оно отлично работает.

Теперь я пытаюсь встроить некоторые проверки в пользовательские входы (имя сайта, целевой каталог, номер порта и т. д.). Вот тут я и выхожу из себя. В настоящее время я пытаюсь отобразить окно сообщения для пользователя, если номер порта не является «действительным», то есть > 65535, меньше 0, нулевым или пустым или в настоящее время используется другим сайтом. Это делается в методе OnBeforeInstall.

В момент, когда пользователь получает сообщение и нажимает «ОК», я хочу, чтобы программа установки остановилась и позволила пользователю ввести другой номер порта. Чтобы уточнить, я не хочу, чтобы установщик откатывался или закрывался, просто позвольте пользователю ввести новый номер порта, а затем попробуйте нажать «Далее». Я также запускаю другие проверки в методе OnBeforeInstall, например, проверяю, существует ли уже веб-сайт. Я не хочу запускать эти проверки до тех пор, пока не будут проверены основные входные данные пользователя.

Вот мой код до сих пор:

    protected override void OnBeforeInstall(System.Collections.IDictionary savedState)
    {
        base.OnBeforeInstall(savedState);

        string msg = "The port: " + targetPort + " is invalid.";
        string caption = "Invalid Port Supplied";
        MessageBoxButtons buttons = MessageBoxButtons.OK;
        DialogResult result = DialogResult.None;

        int UserPort;
        Int32.TryParse(targetPort, out UserPort);

        if (UserPort <= 0 || string.IsNullOrEmpty(targetPort))
        {
           result = MessageBox.Show(msg, caption, buttons);
        }
        else if (UserPort > 65535)
        {
            result = MessageBox.Show(msg + " Please enter a port number less than 65535.", caption, buttons);
        }
        else if (!IsValidPort())
        {
            result = MessageBox.Show(msg + " The port is already in use.", caption, buttons);
        }

        if (result == DialogResult.OK)
        {
            //Pause installer
        }

        ...more checks...

    }

Любая помощь будет оценена по достоинству.


person sr28    schedule 07.08.2014    source источник


Ответы (1)


Это похоже на проект установки Visual Studio, и вы не можете выполнить эту проверку с проектом установки VS.

Несмотря на свое название, OnBeforeInstall запускается после завершения установки и установки файлов, поэтому используемые диалоговые окна появлялись и исчезали, и вы не можете получить доступ к значениям. Отобразите сообщение из этого кода и посмотрите, где оно находится относительно индикатора выполнения. Вы даже можете обнаружить, что веб-сайт уже создан.

Способ проверки в установках MSI заключается в том, что код настраиваемого действия запускается кнопками в диалоговом окне, поэтому, если значения неверны, кнопка «Далее» будет отключена и отобразится сообщение. Вы не можете сделать это с проектами установки VS.

person PhilDW    schedule 09.08.2014
comment
Вы уверены, что OnBeforeInstall запускается после завершения установки? Ни веб-сайт, ни пул приложений не были созданы (и, следовательно, не назначены), когда я пытаюсь это сделать. Кроме того, ваша последняя фраза смутила меня. Проекты установки VS/проекты веб-настройки создают MSI и используют настраиваемые действия (отсюда и предоставленный код). - person sr28; 11.08.2014
comment
В контексте проверки данных, которые вводятся в диалоговое окно MSI, вы не можете запускать настраиваемые действия для проверки этого ввода, поскольку нет поддержки выполнения настраиваемых действий при нажатии этих кнопок диалогового окна. - person PhilDW; 11.08.2014
comment
есть ли способ обойти это, или мне просто нужно разрешить установщику выдавать ошибку, если введенная информация недействительна? - person sr28; 12.08.2014