手动编辑后,文本模板停止工作

时间:2013-07-22 07:37:29

标签: wix wix3.5

在我的安装程序中,我希望用户连接到数据库。我在我的产品中支持4种数据库类型。 在我创建的连接数据库对话框中,有一个ComboBox控件,包含所有支持的数据库类型,Edit控件,用户可以在其中输入连接字符串和PushButton,按下它时将根据所选数据库在Edit控件中显示连接字符串文本模板键入ComboBox。现在,问题是:

  1. 用户在选择MSSQL时单击“显示模板”按钮
  2. 用户在编辑中手动将占位符更改为文本模板连接字符串 控制
  3. 用户意识到他需要MySQL连接
  4. 用户将ComboBox中的值更改为MySQL并单击“显示模板”按钮,然后单击“” 发生的情况。
  5. 总结一下,在手动更改编辑控件后,“显示模板”将停止工作。

    以下是使用WiX代码:

    <Fragment>
        <!-- Supported databases templates -->
        <Property Id="MSSQLTemplate" Value="Data Source=localhost;Initial Catalog=[database];Integrated Security=yes"/>
        <Property Id="MySQLTemplate" Value="Server=localhost;Uid=[username];Pwd=[password];Database=[database];" />
        <Property Id="DB2Template" Value="Server=localhost;Uid=[username];Pwd=[password];Database=[database];" />
        <Property Id="OracleTemplate" Value="Data Source=[database];User Id=[username];Password=[password];" />
    
        <Property Id="PROP_DATABASE_TYPE">MSSQL</Property>
        <Property Id="PROP_CONNECTIONSTRING"></Property>
    
        <Binary Id="CA_DLL" SourceFile="$(var.CustomActions.TargetDir)CustomActions.CA.dll" />
        <CustomAction Id="caShowTemplate" BinaryKey="CA_DLL" DllEntry="ShowTemplate" Execute="immediate" />
        <UI Id="InstallDlg_UI">
          <TextStyle Id="Tahoma_Regular" FaceName="Tahoma" Size="8" />
          <Property Id="DefaultUIFont" Value="Tahoma_Regular" />
          <Dialog Id="InstallDlg" Width="370" Height="270" Title="Amazing Software" NoMinimize="no">
            <!-- Database type -->
            <Control Id="lblDatabaseType" Type="Text" X="20" Width="100" Y="60" Height="18" NoPrefix="yes" Text="Database Type" />
            <Control Id="cbDatabaseServer" Type="ComboBox" X="120" Width="90" Y="60" Height="18" Property="PROP_DATABASE_TYPE" ComboList="yes" Sorted="yes">
              <ComboBox Property="PROP_DATABASE_TYPE">
                <ListItem Text="MSSQL" Value="MSSQL" />
                <ListItem Text="MySQL" Value="MySQL" />
                <ListItem Text="Oracle" Value="Oracle" />
                <ListItem Text="DB2" Value="DB2" />
              </ComboBox>
            </Control>
            <Control Id="btnShowTemplate" Type="PushButton" X="215" Y="60" Width="85" Height="17" Text="Show Template">
              <Publish Event="DoAction" Value="caShowTemplate" Order="1">1</Publish>
              <Publish Property="PROP_CONNECTIONSTRING" Value="[PROP_CONNECTIONSTRING]" Order="2">1</Publish>
            </Control>
            <!-- Connection string -->
            <Control Id="lblConnectionString" Type="Text" X="20" Width="100" Y="85" Height="18" NoPrefix="yes" Text="Connection String" />
            <Control Id="tbConnectionString" Type="Edit" X="120" Width="180" Y="85" Height="18" Property="PROP_CONNECTIONSTRING" Text="[PROP_CONNECTIONSTRING]" />
            <Control Id="CancelButton" Type="PushButton" Text="Cancel" Height="17" Width="56" X="180" Y="243" Cancel="yes">
              <Publish Event="EndDialog" Value="Exit" />
            </Control>
          </Dialog>
          <InstallUISequence>
            <Show Dialog="InstallDlg" Before="ExecuteAction" />
          </InstallUISequence>
        </UI>
      </Fragment>
    

    用C#编写的自定义操作:

    [CustomAction]
    public static ActionResult ShowTemplate(Session session)
    {
      string selectedDatabase = string.Format("{0}Template", session["PROP_DATABASE_TYPE"]);
      session["PROP_CONNECTIONSTRING"] = session[selectedDatabase];
      return ActionResult.Success;
    }
    

    我做错了什么?

1 个答案:

答案 0 :(得分:1)

您的代码没有任何问题。这是WIX UI的一个众所周知的限制。请查看以下讨论以获取更多详细信息。

http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/UI-Edit-Box-not-updating-td5077648.html

Wix Interactions with Conditions, Properties & Custom Actions