将参数传递给CustomAction并使用返回值

时间:2011-11-03 06:00:10

标签: wix

有没有办法将数据传递给(托管的,C#)CustomAction?最好使用Session对象的CustomActionData集合。我还想在UI控件部分中使用CustomAction的返回值。

更具体地说,我想允许用户指定用于运行我正在安装的服务的用户名和密码。因此,我创建了一个对话框,当用户单击“下一步”时,我想启动一个自定义操作,检查凭据是否有效。如果帐户存在,则自定义操作将返回Success;如果不存在,则返回其他值(最好是NotExecuted或SkipRemainingActions,但将解决失败)。 然后在(wxs)对话框中,如果自定义操作返回成功,则转到下一个对话框(在安装序列中)。如果操作返回备用值(NotExecuted),则会出现一个SpawnDialog,告诉用户该帐户无法验证,但如果他们愿意,可以使用是或否按钮继续。

如果有人能够解释在Wix中做到这一点的最好方法那会很棒。 感谢。

2 个答案:

答案 0 :(得分:6)

鉴于Windows安装程序UI的局限性,我决定采用略有不同的方法。我现在启用/禁用下一步按钮,具体取决于基本字段输入是否有效,即如果用户名字段为空,则禁用该按钮。我使用(C#)CustomAction通过通过属性传递用户名/密码来验证用户帐户是否存在,并将结果返回到另一个属性。返回安装程序UI,如果帐户无效,则会显示一个消息框。

我还提供了一个复选框,允许用户忽略帐户检查,然后继续。

我从http://www.geekproject.com/showtopic.aspx?ID=94

得到了这个想法

见下图。

Example dialog

答案 1 :(得分:2)

Windows Installer并不真正通过C#自定义操作支持此功能。

WiX Toolset支持从C#访问安装程序属性,但它确实有一些限制。另外,我认为你不能用它来控制自定义动作返回码。

所以最好的解决方案仍然是win32 DLL,它接收安装句柄: http://www.codeproject.com/KB/install/msicustomaction.aspx

这样您就可以使用Windows Installer API来读取和设置属性:

创建自定义操作后,您可以使用安装程序属性而不是返回代码来调整下一个对话框:

  • 调整显示下一个对话框的NewDialog控件事件
  • 调整消息框自定义操作,通知用户他无法继续的原因或他的选项

以下是一篇详细介绍的文章:http://setupanddeployment.com/installation-user-interface/validate-user-input-installation/

这种方法可以防止用户继续使用无效数据,但可以轻松调整以便为他提供一些选项并自动处理。

相关问题