如何根据环境变量有条件地运行WiX中的Upgrade元素

时间:2016-10-20 05:45:23

标签: wix windows-installer

我是否有办法让Upgrade元素仅在未设置某个环境变量时运行?

否则,如果检测到环境变量,安装程序应将新软件与现有软件并排安装。

由于Upgrade没有取Condition元素,我试图把它放在像这样的片段中:

<Fragment>
  <Upgrade Id="$(var.Guid7)">
    <UpgradeVersion Minimum="$(var.Version).0" Maximum="$(var.Version).2" IncludeMinimum="yes" IncludeMaximum="no" Property="PREVIOUSREVISIONINSTALLED" />
  </Upgrade>
  <ComponentGroup Id="FakeComponent" />
</Fragment>

然后使用Product

Feature调用它
<Feature
    Id="ConditionalUpdate"
    Title="Upgrade"
    Absent="allow" AllowAdvertise="no"
    Level="1" >
  <Condition Level="0" ><![CDATA[%CERTAIN_VARIALBE]]></Condition>
  <ComponentGroupRef Id="FakeComponent" />
</Feature>

然而,这似乎每次都会触发升级代码,因此无论是否定义了环境变量,它都会一直更新。

有关如何解决此问题的任何想法?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

这基本上与这个问题相同:

How to let the user choose between upgrade or full install?

除了您根据环境变量决定。在您的情况下,您可以使用环境变量调整%ENV上的RemoveExistingProducts操作,这是一个标准的Windows Installer条件:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa368012(v=vs.85).aspx

但不知道确切的检查,我无法引用您需要的确切条件。

转换解决方案可能是合适的,很难说在不了解整个环境的情况下(可能您已经在使用转换来处理其他内容)。