0

我正在创建一个安装程序,该安装程序当前在 IIS 中创建一个新网站,创建一个应用程序池,然后将此池分配给该网站。我创建了一个自定义操作来执行此操作,并且效果很好。

现在我正在尝试对用户输入(站点名称、目标目录、端口号等)进行一些检查。这就是我不解的地方。我目前正在尝试向用户显示一个消息框,如果端口号不是“有效”即 > 大于 65535、小于 0、null 或空白,或者当前正在被另一个站点使用。这是在 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...

    }

任何帮助,将不胜感激。

4

1 回答 1

1

这看起来像一个 Visual Studio 安装项目,您无法使用 VS 安装项目进行验证。

尽管它的名称 OnBeforeInstall 在安装完成并安装文件后运行,因此使用的对话框来来去去,您无法访问这些值。显示来自该代码的消息,并查看它相对于进度条的位置。您甚至可能会发现该网站已经创建。

在 MSI 安装中完成验证的方式是自定义操作代码由对话框中的按钮触发,因此如果值不正确,下一步按钮将被禁用并显示一条消息。您不能对 VS 设置项目执行此操作。

于 2014-08-09T17:37:52.040 回答