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

Я создаю установщик, который в настоящее время создает новый веб-сайт в 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...

    }

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

1 ответ

Решение

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

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

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

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