在WiX中验证命令行参数

时间:2013-04-27 15:35:24

标签: wix

我想在安装期间验证用户在WiX中命令行属性的值。如果属性的值不是特定集中的值,则应采用默认值并创建注册表项。

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

2 个答案:

答案 0 :(得分: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)。

答案 1 :(得分:0)

您可以使用 SetProperty 元素更改USERLEVEL属性值。您可以使用(USERLEVEL&lt; 1 OR USERLEVEL&gt; 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>