我试图跳过安装在下列情况下:
- Windows操作系统类型=桌面操作系统
- 如果HKLM \系统\ CurrentControlSet \服务\为MyService的myKey = myvalue的
- 如果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>
注 :我需要验证正确的明天下面使用的条件,但后我有什么,所以你可以看看它,而无需等待。
当任一这三个“子”的条件 - 是真实的,你怎么想达到什么目的?
- 中止设置 :放弃整个安装? ( LaunchConditions )
- 配置功能 :防止或启用安装特定功能(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 install
和major 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")
的条件的部分似乎是不需要的。 离开上述,因为它是对于现在的样品。
链接: