2013-04-27 78 views
1

我想在安装过程中验证用户给定的WiX中命令行属性的值。如果该属性的值不是特定集合中的值,则应该采用默认值并创建一个注册表项。验证WiX中的命令行参数

例如,属性USERLEVEL应该具有值1-4。如果用户指定任何其他值,它应该默认为1并将其写入注册表。安装程序没有UI组件,我们希望使用某些条件语句来执行此操作。

回答

0

您可以使用SetProperty元素更改USERLEVEL属性值。您可以使用(USERLEVEL < 1或USERLEVEL > 4)条件来检查该值,但如果最终用户传递任何非整数值(如“A”),该条件将不起作用。

<Property Id="USERLEVEL" Secure="yes" /> 

<SetProperty Id="USERLEVEL" Value="1" After="AppSearch"> 
    USERLEVEL&lt;&gt;1 AND USERLEVEL&lt;&gt;2 AND USERLEVEL&lt;&gt;3 AND USERLEVEL&lt;&gt;4 
</SetProperty> 

您可以使用下面的代码将属性写入注册表。

<Component Id="CMP_UserLevel" Guid="{FD70BBE3-F7F1-460E-AA7C-56750F66536D}"> 
     <RegistryKey Root="HKLM" Key="Software\Sample, Inc.\Test Installer"> 
      <RegistryValue Name="USERLEVEL" Value="[USERLEVEL]" Type="integer" /> 
     </RegistryKey> 
</Component> 
1

这可以通过“启动条件”来完成。作为Product元素的子元素,请在消息中添加一个Condition元素。例如:

<Product ...> 
    ... 

    <Condition Message='The USERLEVEL property has an invalid value of: [USERLEVEL]. Please ensure the value falls in the range of 1 to 4.'> 
     USERLEVEL&gt;0 AND USERLEVEL&lt;5 
    </Condition> 

我用了&gt;&lt;而非CDATA包装的情况,但你可以做到这一点,只要你喜欢。最终的结果是你想要条件说出类似USERLEVEL > 0 and USERLEVEL < 5(或者如果你喜欢:USERLEVEL >=1 AND USERLEVEL <= 4)。

+0

有没有办法检查提供的字符串的长度?即,如果我想强制执行仅限特定长度的字符串或长于从命令行提供的某些特定数量的字符? – user1552175 2014-11-12 22:43:52