WIX-有条件地安装功能
我正在尝试安装具有以下条件的功能:“INSTALLTHIS=“YES”。属性“INSTALLTHIS”最初设置为“否”。操作“test_command”将“INSTALLTHIS”设置为“YES”。“test_command2”中的消息框显示此属性的值已设置为“YES”。我希望安装“ProductFeature”,因为“INSTALLTHIS=”是真的,除非它没有安装WIX-有条件地安装功能,wix,wix3.10,Wix,Wix3.10,我正在尝试安装具有以下条件的功能:“INSTALLTHIS=“YES”。属性“INSTALLTHIS”最初设置为“否”。操作“test_command”将“INSTALLTHIS”设置为“YES”。“test_command2”中的消息框显示此属性的值已设置为“YES”。我希望安装“ProductFeature”,因为“INSTALLTHIS=”是真的,除非它没有安装 <?xml version="1.0" encoding="UTF-8"?> <Wix xmlns="http
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<Product Id="*" Name="test" Language="1033" Version="1.0.0.0" Manufacturer="test_wix" UpgradeCode="351b96ea-a1af-4542-8be9-9e8e07878a99">
<Property Id="INSTALLTHIS" Value="NO" Secure="yes"></Property>
<Feature Id="ProductFeature" Title="SetupProject1" Level="0">
<ComponentRef Id="ClientSoftware" />
<Condition Level="1">
<![CDATA[INSTALLTHIS="YES"]]>
</Condition>
</Feature>
<CustomAction Id="test_command" Script="vbscript">
<![CDATA[
Session.Property("INSTALLTHIS") = "YES"
]]>
</CustomAction>
<CustomAction Id="test_command2" Script="vbscript">
<![CDATA[
MsgBox(Session.Property("INSTALLTHIS")) <!-- SAYS YES IN THE MESSAGE BOX -->
]]>
</CustomAction>
<InstallExecuteSequence>
<Custom Action="test_command" After="CostFinalize">NOT Installed</Custom>
<Custom Action="test_command2" After="test_command">NOT Installed</Custom>
</InstallExecuteSequence>
</Product>
]]>
未安装
未安装
(我删除了不必要的XML,如目录设置、ComponentGroup、Component)您想要做的事情是不可能的。看看这个问题,你会发现一个类似的问题。首先评估特征条件,然后再评估其他条件。在您的情况下,这意味着当评估特征条件时,安装this=“否”。链接的答案提供了一个潜在的解决方案,尽管我没有使用这种方法,但在我工作的一个安装程序中,当我们需要这种行为时,我们的解决方案是从引导程序传递属性。您遇到的问题主要是排序问题:功能条件在成本计算期间处理(特别是在CostFinalize操作期间)。一旦成本计算完成,它们就不会产生进一步的影响。也就是说,我将避免以这种方式使用功能条件和级别,尤其是在涉及
Level=“0”
的情况下。(Level=“0”实际上只适用于永远不会改变的事情,例如操作系统的比特度。)
如果您希望允许用户通过传递命令行有条件地安装功能,请记录安装程序的功能。然后他们可以传递。如果您希望在不更改功能安装状态的情况下控制单个组件,则可以在组件上设置条件。但这些条件也会在协同过程中处理sting,所以在排序时你仍然需要小心
作为补充说明,请避免仅使用VBScript操作来设置属性。我假设这是实际操作的简化,但如果不是,请使用操作。(我通常建议在所有情况下都避免使用VBScript操作,但更改更复杂的操作会有更大的难度,因此风险更大,因此您必须做出决定。)