我有一个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>