gpt4 book ai didi

wix - 如何根据属性值安装功能

转载 作者:行者123 更新时间:2023-12-04 14:04:56 25 4
gpt4 key购买 nike

我有一个注册表项,可以等于两个值之一:特殊值或null。和两个功能。

当我的注册表项等于特殊值时,安装程​​序必须安装第一个功能。如果通过注册表搜索未找到注册表项,则安装程序必须安装第二个功能。并且,如果注册表项的值为空,则安装程序不得安装这两个功能中的任何一个。

我在做什么或理解错误?如果INSTALLLEVEL = 5,SPECIALVALUE =“special”,MYTREAT =“1”,则必须安装第一个功能,但是在这种情况下,安装程序不会同时安装这两个功能。

<Feature Id="MyFeatures" Level="1" ConfigurableDirectory='INSTALLLOCATION' Display='expand' AllowAdvertise='no'>

<ComponentRef Id='Empty'/>

<Feature Id='First' Level='3' AllowAdvertise='no' ConfigurableDirectory='INSTALLLOCATION'>
<Condition Level="0">INSTALLLEVEL=4 OR (MYTREAT="1" AND NOT SPECIALVALUE AND NOT SPECIALVALUE="")</Condition>
<Condition Level="1">SPECIALVALUE="special" AND MYTREAT="1"</Condition>
<ComponentRef Id="first_comp"/>
</Feature>

<Feature Id="Second" Level="4" AllowAdvertise="no" ConfigurableDirectory="INSTALLLOCATION">
<Condition Level="0">INSTALLLEVEL=3 OR (MYTREAT="1" AND SPECIALVALUE)</Condition>
<ComponentRef Id="second_comp"/>
</Feature>

</Feature>

我已经修改了代码,但是仍然无法正常工作。条件问题。注册表项中有一个特殊值,但安装程序仍在跳过第一个功能。我发现只有“MYTREAT = 1”的条件无法正常工作。但是在日志中,客户端正在将具有此值的MYTREAT属性发送到服务器。INSTALLLEVEL为1。MYTREAT属性是通过按钮控件初始化的,这可能是我的麻烦吗?这里是新代码:
     <Feature Id="Myfeatures" Level="3"
ConfigurableDirectory='INSTALLLOCATION'
Display='expand' AllowAdvertise='no'>
<Condition Level='1'>MYTREAT="1"</Condition>
<ComponentRef Id='Empty'/>
<Feature Id='First' Level='3' AllowAdvertise='no'
ConfigurableDirectory='INSTALLLOCATION'> <!--Must be installed by default,default value of INSTALLLEVEL is 3-->
<Condition Level="1">MYTREAT="1" AND SPECIALVALUE="SPECIAL"</Condition>
<ComponentRef Id="first_comp"/>
</Feature>
<Feature Id="Second" Level="10" AllowAdvertise="no"
ConfigurableDirectory="INSTALLLOCATION"><!---->
<Condition Level="1">(MYTREAT="1" AND NOT SPECIALVALUE)</Condition>
<ComponentRef Id="second_comp"/>
</Feature>
</Feature>

............
<Dialog Id="TreatDlg" Width="260" Height="85">
<Control Id="Mytreat" Type="PushButton" X="50" Y="57" Width="56" Height="17" Property="MYTREAT">
<Publish Property="MYTREAT" Value="1">1</Publish>
<Publish Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
</Control>

P.S. 我默认将MYTREAT初始化为1,并且条件已正确评估。为什么我不能在功能状态下使用控件的属性?以及如何解决我的问题!请提供任何帮助!

最佳答案

一个常见的错误是试图通过INSTALLLEVEL属性来控制功能。安装级别应该是静态的,您不应在安装过程中更改它。

INSTALLLEVEL值被视为一个不再可以安装功能的级别。例如,如果INSTALLLEVEL = 5,将安装具有级别4的功能,而不会安装具有级别6的功能。

通过INSTALLLEVEL,您可以控制原始功能状态,例如:

<Feature Id="MyFeatures" Level="4" ConfigurableDirectory='INSTALLLOCATION' Display='expand' AllowAdvertise='no'>

<!-- Feature is not installed by default -->
<Feature Id='First' Level='6' AllowAdvertise='no' ConfigurableDirectory='INSTALLLOCATION'/>

<!-- Feature is installed by default -->
<Feature Id="Second" Level="4" AllowAdvertise="no" ConfigurableDirectory="INSTALLLOCATION"/>

</Feature>

对于上述配置,然后可以通过将级别设置为低于或高于INSTALLLEVEL来添加安装条件:
<Feature Id="MyFeatures" Level="4" ConfigurableDirectory='INSTALLLOCATION' Display='expand' AllowAdvertise='no'>

<Feature Id='First' Level='6' AllowAdvertise='no' ConfigurableDirectory='INSTALLLOCATION'>
<Condition Level="4">(MYTREAT="1") AND (SPECIALVALUE="special")</Condition>
</Feature>

<Feature Id="Second" Level="4" AllowAdvertise="no" ConfigurableDirectory="INSTALLLOCATION">
<Condition Level="6">(INSTALLLEVEL = 3) OR (MYTREAT="1" AND SPECIALVALUE)</Condition>
</Feature>

</Feature>

如您所见,要素“级别”属性围绕INSTALLLEVEL,而不是相反。

编辑:

在显示任何安装对话框之前,先评估功能条件。因此,您无法使用对话框控件(例如,复选框或按钮)来调节功能。

一种解决方案是使用自定义 Action ,该 Action 将根据您的自定义属性修改功能 Action 。例如,您可以使用 MsiSetFeatureState函数。您可以在此处找到自定义操作教程:
http://www.codeproject.com/KB/install/msicustomaction.aspx

关于wix - 如何根据属性值安装功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7552963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com