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

Wix 将参数传递给CustomAction并使用返回值,wix,Wix,有没有一种方法可以将数据传递给(托管的,C#)CustomAction?最好使用会话对象的CustomActionData集合。我还想在我的UI控件部分中使用CustomAction的返回值 更具体地说,我希望允许用户指定一个用户名和密码,我正在安装的服务将在该用户名和密码下运行。因此,我创建了一个对话框,当用户单击“下一步”时,我希望启动一个自定义操作,检查凭据是否有效。如果帐户存在,自定义操作将返回Success,如果不存在,则返回其他一些值(最好是NotExecuted或skippremi

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

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

如果有人能在Wix中解释最好的方法,那就太好了。
谢谢。

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

WiX工具集提供了从C#访问安装程序属性的支持,但它确实有一些限制。此外,我认为您不能用它控制自定义操作返回代码

因此,最好的解决方案仍然是接收安装句柄的win32 DLL:

通过这种方式,您可以使用Windows Installer API读取和设置属性:

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

  • 调节显示下一个对话框的NewDialog控件事件
  • 条件消息框自定义操作,通知用户无法继续的原因或选项
以下是一篇更详细的文章:


这种方法可以防止用户继续使用无效数据,但可以很容易地为用户提供一些选项并自动处理这些数据。

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

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

我是从你那里得到这个主意的

见下图


实际上,Wix 3.5支持通过会话对象访问属性,会话对象被传递给CustomAction。这就是我(现在)实现我的需求的方式。如果用户通过复选框选择不验证帐户,我只会显示一条警告消息,而不是让用户选择是/否。