如何让安装程序暂停/允许验证?

时间:2014-08-07 10:02:42

标签: c# custom-action web-setup-project

我正在创建一个当前在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 个答案:

答案 0 :(得分:1)

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

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

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