我是否有办法让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>
然而,这似乎每次都会触发升级代码,因此无论是否定义了环境变量,它都会一直更新。
有关如何解决此问题的任何想法?任何帮助表示赞赏。
答案 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
但不知道确切的检查,我无法引用您需要的确切条件。
转换解决方案可能是合适的,很难说在不了解整个环境的情况下(可能您已经在使用转换来处理其他内容)。