如何验证.NET Installer类中的自定义对话框输入?

时间:2013-02-11 12:50:03

标签: visual-studio-2010 installer setup-project

我有一个VS 2010安装项目。 在安装项目中,我有一个自定义对话框和一个自定义操作。 两者都可以工作,我甚至可以调试我的自定义操作,它可以正确接收用户在自定义对话框中提供的输入。

我想验证用户输入,并且只允许用户在输入有效时转到下一步。 我可以使用MessageBox.Show显示一个消息框,但是如果用户更正输入,我怎么能阻止进入下一步呢?

public override void Install(IDictionary stateSaver)
{
    base.Install(stateSaver);
    string myInput = Context.Parameters["MY_INPUT"]; // Value from custom dialog
    if (myInput ..... )
    {
        // Not a valid input, we do not want to proceed to the next step 
        MessageBox.Show("Not a valid input, please correct it");

        // What to do here? 
        // How can I tell the Installer do not accept this input?
    }
    else
    {
        // Valid input...
    }
 }

答案的答案

1 个答案:

答案 0 :(得分:1)

实现此目的的最简单方法是从自定义操作设置属性,并使用该属性来调整用户按下“下一步”按钮时调用的NewDialog事件,因此如果条件为不是真的。

.NET Installer类自定义操作无法直接从其代码设置属性,但您可以使用C#代码编写可以获取/设置属性的其他类型的自定义操作,如下例所示:http://www.advancedinstaller.com/user-guide/qa-c-sharp-ca.html

编辑:你可以通过编辑VS和Orca生成的MSI来做到这一点,但是,我觉得这很痛苦,因为你需要手动编辑多个表,比如Binary,CustomActions,ControlEvent 。以下是让您开始使用的内容:http://support.microsoft.com/kb/255905
另一种方法是使用更高级的设置创作工具切换创建安装程序包。如果你想使用免费且功能强大的WiX(http://wix.sourceforge.net/),它将花费你一些时间来开始它,但它比在Orca中编辑更快。高级安装程序(http://www.advancedinstaller.com)可以让您更快更轻松地编辑项目的商业替代方案,但您需要获得企业许可证才能完成所需的工作。