WIX-有条件地安装功能

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

我正在尝试安装具有以下条件的功能:“INSTALLTHIS=“YES”。属性“INSTALLTHIS”最初设置为“否”。操作“test_command”将“INSTALLTHIS”设置为“YES”。“test_command2”中的消息框显示此属性的值已设置为“YES”。我希望安装“ProductFeature”,因为“INSTALLTHIS=”是真的,除非它没有安装

<?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操作,但更改更复杂的操作会有更大的难度,因此风险更大,因此您必须做出决定。)