我正在创建一个当前在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...
}
任何帮助都将不胜感激。
答案 0 :(得分:1)
这看起来像是Visual Studio安装项目,您无法使用VS安装项目进行验证。
尽管OnBeforeInstall的名称在安装完成并且安装了文件后运行,但所使用的对话框已经过去了,您无法访问这些值。显示该代码中的消息,并查看它相对于进度条的位置。您甚至可能发现该网站已经创建。
在MSI安装中进行验证的方式是自定义操作代码由对话框中的按钮触发,因此如果值不正确,将禁用“下一步”按钮并显示一条消息。您无法使用VS安装项目执行此操作。