2

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

例如,属性 USERLEVEL 的值应为 1-4。如果用户指定任何其他值,它应该默认为 1 并将其写入注册表。安装程序没有 UI 组件,我们想使用一些条件语句来做到这一点。

4

2 回答 2

2

这可以通过“启动条件”最简单地完成。作为元素的子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;and&lt;而不是包装条件,CDATA但你可以随心所欲地做。最终结果是您希望条件说出类似的USERLEVEL > 0 and USERLEVEL < 5内容(或者如果您愿意:)USERLEVEL >=1 AND USERLEVEL <= 4

于 2013-04-27T16:21:44.147 回答
0

您可以使用SetProperty元素来更改 USERLEVEL 属性值。您可以使用 (USERLEVEL<1 OR 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>   
于 2013-04-29T07:11:17.583 回答