故障状况威克斯故障状况威克斯(Failing condition wix)

2019-05-12 11:28发布

我试图跳过安装在下列情况下:

  1. Windows操作系统类型=桌面操作系统
  2. 如果HKLM \系统\ CurrentControlSet \服务\为MyService的myKey = myvalue的
  3. 如果REG HKLM \系统\ CurrentControlSet \服务\为MyService = DisplayName的存在并且HKLM \系统\ CurrentControlSet \服务\为MyService的myKey不存在

而安装很顺利,但在安装我的特点是从安装缺少。

我在做什么错在把状态?

<Property Id="MYKEY" Secure="yes">
        <RegistrySearch Id="MyKey"
                             Root="HKLM"
                             Key="SYSTEM\CurrentControlSet\Services\MyService"
                             Name="mykey"
                             Type="raw" />
    </Property>
    <Property Id="MYSERVICE" Secure="yes">
        <RegistrySearch Id="MYSERVICE"
                        Root="HKLM"
                             Key="SYSTEM\CurrentControlSet\Services\MyService"
                             Name="DisplayName"
                             Type="raw" />
    </Property>
<Feature Id="MyFeature" Level="" Display="" Title="" Description="" AllowAdvertise="no" ConfigurableDirectory="INSTALLDIR">
   <MergeRef Id="MyFeature" Primary="yes"/>
   <Condition Level="0">((MsiNTProductType=1) OR 
   (MYKEY="MyValue") OR 
   (MYSERVICE="MyService" AND MYKEY=""))</Condition>
   </Condition>
</Feature>

Answer 1:

:我需要验证正确的明天下面使用的条件,但后我有什么,所以你可以看看它,而无需等待。


当任一这三个“子”的条件 - 是真实的,你怎么想达到什么目的?

  1. 中止设置 :放弃整个安装? ( LaunchConditions )
  2. 配置功能 :防止或启用安装特定功能(S)的? ( 特征条件 )

这种差异显然是至关重要的 - 我们必须知道能够回答。 您的WiX源代码片断目前显示作为特征条件的条件。 我有一种感觉,这是不是你想要的。


LaunchConditions:为了退出,如果这些条件之一为真,整个安装,你可以尝试使用LaunchCondition条目。 而不是让一个复杂的条件,你可以在每一个检查,如果设置应该被中止三种不同的条目将它们分割 - 对不同的具体原因每个条目。 我建议你在你的WiX源文件的包装元素后添加这些LaunchCondition条目:

<Condition Message="Aborting setup: Server OS required for installation.">Installed OR MsiNTProductType=1</Condition>
<Condition Message="Aborting setup: State reason for abortion.">Installed OR MYKEY="MyValue"</Condition>
<Condition Message="Aborting setup: State reason for abortion.">Installed OR (MYSERVICE="MyService" AND MYKEY="")</Condition>

这些条目将使其进入LaunchCondition表已编译的MSI文件。

LaunchConditions必须始终为true的设置,以便能够安装/运行。

因此, Installed条件的部分上面是有保证的条件总是真安装后-这样你就不会得到该设置将不会允许自己被卸载或修理,因为发射条件不符合的情况。 条件: Installed -永远是除了真正的fresh installmajor upgrades

:我不知道发射条件是否可以在管理安装带来麻烦。 我不认为他们(管理员安装,拥有自己的安装序列)。 我会测试和验证的明天。 添加OR ACTION="ADMIN"的运行管理安装时,应就任何盒启动条件为真。


功能条件 :如果你不想放弃的设置,而是要控制基础上评估这些条件,功能安装状态,您需要使用该功能的条件 ,而不是概念的启动条件的概念。

当您设置的Feature level ,以0在维克斯源,这一功能将不会在设置界面显示 ,它是不会被默认安装两种 。 一个特征条件可以改变这一点,并设置功能来安装,如果条件计算为真。

你也可以去周围的其他方法和功能级别设置为1,默认情况下(这应该安装该功能),然后使用功能的条件,以它的功能级别设置为0 - 如果你不想安装的功能做 - 当条件为真。

还有在“ 快速样机 ”这里的一些进一步的细节: 使用注册表维克斯如果... else条件 。

在下面的WiX的片断,我们设置功能默认情况下安装( Level="1" ),然后我们使用功能的条件设定功能,如果相关条件评估不安装正确(这是一个多部分条件) 。 因此,一旦条件计算结果为true我们分配功能Level="0" (即不要安装功能和设置界面隐藏):

<Feature Id="MyFeature" Level="1"> <!--Default to install feature-->

  <Condition Level="0"> <!--Do not install feature if condition is true-->
    ((MsiNTProductType=1) OR (MYKEY="MyValue") OR (MYSERVICE="MyService" AND MYKEY="") AND (NOT ACTION="ADMIN"))
  </Condition>

</Feature>

AND (NOT ACTION="ADMIN")部分是强制安装在管理安装该功能。 它有效地如果安装在管理安装模式下运行评估为true,关闭其他条件 - 这将导致特征不是管理员安装过程中安装。 最后这部分一定要考的明天。

UPDATE:测试表明,设置为任意功能Level=0为默认值将不能提取过程中的管理安装在所有的,无论任何功能的条件设置为安装该功能。 我猜初步结论是不设置任何功能Level=0 ,但设置Level=1 ,然后将它们设置为Level=0与计算结果为true的功能状态。 这样的功能可能隐藏在常规安装,但所有的功能 - 与相关的文件 - 管理员安装过程中被提取。 的AND (NOT ACTION="ADMIN")的条件的部分似乎是不需要的。 离开上述,因为它是对于现在的样品。


链接:

  • WIX如果... else条件使用注册表


文章来源: Failing condition wix