Question

In my installer I want user to connect to database. I support 4 database types in my product. In the connect to database dialog I created, there is a ComboBox control with all supported database types, Edit control where user suppose to enter the connection string and a PushButton, when pressed it will show connection string text template in Edit control according to selected database type in ComboBox. Now, the problem is:

  1. User clicks Show Template button when MSSQL is selected
  2. User alters manually place holder in text template connection string in Edit control
  3. User realize that he needs MySQL connection
  4. User change value in ComboBox to MySQL and clicks Show Template button and nothing happens.

To summarize this, after Edit control were manually altered, the Show Template stops working.

Here is WiX code use:

<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>

And a custom action written in 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;
}

What am I doing wrong?

Was it helpful?

Solution

Your code doesn’t have any issue. It is a well-known limitation of WIX UI. Check the below discussions for more details.

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

Wix Interactions with Conditions, Properties & Custom Actions

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top