如何将 MSI 安装程序属性分配给 XSL 变量



我有一个MSI安装程序属性SQLSERVER_AUTHENTICATIONMODE,它在安装程序UI中设置(使用Wix对话框)。我在 Wix 项目中有一个 XSLT,用于转换安装中包含的File.xml。变换的类型取决于SQLSERVER_AUTHENTICATIONMODE的值,例如:

<xsl:variable name="sqlServerAuthenticationMode">[SQLSERVER_AUTHENTICATIONMODE]</xsl:variable>
<xsl:choose>
    <xsl:when test="$sqlServerAuthenticationMode = 1">
        <util:XmlFile
            Id="UpdateConnectionString"
            Action="bulkSetValue"
            ElementPath="//ConnectionString"
            File="[INSTALLFOLDER]File.xml"
            Value="Provider=SQLOLEDB;Server=[SQLSERVER_SERVERNAME];database=[SQLSERVER_DATABASENAME];Integrated Security=SSPI;Persist Security Info=False;"/>
    </xsl:when>
    <xsl:otherwise>
        <util:XmlFile
            Id="UpdateConnectionString"
            Action="bulkSetValue"
            ElementPath="//ConnectionString"
            File="[INSTALLFOLDER]File.xml"
            Value="Provider=SQLOLEDB;Server=[SQLSERVER_SERVERNAME];database=[SQLSERVER_DATABASENAME];User Id=[SQLSERVER_USERNAME];Password=[SQLSERVER_PASSWORD];Persist Security Info=False;"/>
    </xsl:otherwise>
</xsl:choose>

xsl:variable设置不正确,因为$sqlServerAuthenticationMode = 1永远不会正确。例如,当SQLSERVER_AUTHENTICATIONMODE为 1 时,$sqlServerAuthenticationMode应设置为 1,但事实并非如此。

派对有点晚了,但希望这会对某人有所帮助。

这些 MSI 属性直到运行时才会分配,xsl:variable 在编译/预处理期间将为空。

您可以尝试这样的组件和条件:

<Component Id="{@Id}_auth" Guid="*">
  <Condition><![CDATA[SQLSERVER_AUTHENTICATIONMODE = 1]]></Condition>
  <util:XmlFile
      Id="UpdateConnectionString"
      Action="bulkSetValue"
      ElementPath="//ConnectionString"
      File="[INSTALLFOLDER]File.xml"
      Value="Provider=SQLOLEDB;Server=[SQLSERVER_SERVERNAME];database=[SQLSERVER_DATABASENAME];Integrated Security=SSPI;Persist Security Info=False;"/>
</Component>
<Component Id="{@Id}_noauth" Guid="*">
  <Condition><![CDATA[SQLSERVER_AUTHENTICATIONMODE <> 1]]></Condition>
  <util:XmlFile
      Id="UpdateConnectionString"
      Action="bulkSetValue"
      ElementPath="//ConnectionString"
      File="[INSTALLFOLDER]File.xml"
      Value="Provider=SQLOLEDB;Server=[SQLSERVER_SERVERNAME];database=[SQLSERVER_DATABASENAME];User Id=[SQLSERVER_USERNAME];Password=[SQLSERVER_PASSWORD];Persist Security Info=False;"/>
</Component>

最新更新