【问题标题】:Wix Component UPGRADINGPRODUCTCODE condition not workingWix 组件升级产品代码条件不起作用
【发布时间】:2015-12-27 06:33:25
【问题描述】:

我不希望在自动卸载发生时执行 SQL 脚本,因为重大升级会删除现有产品。

问题是我将数据库用户名和密码作为命令行参数传递,所以当它进行升级并自动运行卸载时,它会尝试执行 SQL 脚本,但没有数据库用户名或密码,所以升级然后失败。您可以在 SQL Profiler 中看到用户名设置为 ''(空白)。

我的组件代码如下:

<Component Id="SQL" Guid="AF267662-23A0-4b46-B490-C11465BE9858" KeyPath="yes" >
<Condition>NOT UPGRADINGPRODUCTCODE AND NOT REMOVE="ALL"</Condition>            
<!--UNINSTALL-->
<sql:SqlScript Id="Uninstall.SQLScript" ExecuteOnInstall="no" ExecuteOnUninstall="yes" BinaryKey="SQLScript.Uninstall" User="SQLUser" SqlDb="SqlDatabase" Sequence="1"/>

<!--INSTALL-->
<sql:SqlScript Id="SQLScript2" ExecuteOnInstall="yes" ExecuteOnUninstall="no" BinaryKey="SQLScript.Create.DBObjects" User="SQLUser" SqlDb="SqlDatabase" Sequence="3"/>
</Component>

【问题讨论】:

    标签: wix windows-installer


    【解决方案1】:

    条件应该在自定义操作上,而不是在组件上。 这有一个很好的例子:

    Wix: Run custom action based on condition

    这里也一样: How can I perform a custom action in WiX that only executes on install or uninstall?

    当您在组件上设置条件时,您会使其具有传递性,这意味着组件的安装状态将在安装和修复期间根据属性的值而变化。这不是您真正需要的,这就是为什么您应该调节 CA 而不是组件。

    【讨论】:

      猜你喜欢
      • 2013-05-15
      • 2017-02-27
      • 1970-01-01
      • 2011-11-13
      • 2017-12-14
      • 1970-01-01
      • 2013-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多