【问题标题】:Validation of a command line parameter in WiX在 WiX 中验证命令行参数
【发布时间】:2013-04-27 15:35:23
【问题描述】:

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

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

【问题讨论】:

    标签: wix


    【解决方案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>
    

    我使用了&amp;gt;&amp;lt; 而不是将条件包装在CDATA 中,但您可以随心所欲地进行操作。最终结果是您希望条件说出类似USERLEVEL &gt; 0 and USERLEVEL &lt; 5 的内容(或者如果您愿意:USERLEVEL &gt;=1 AND USERLEVEL &lt;= 4)。

    【讨论】:

    • 有没有办法检查提供的字符串的长度?即,如果我只想强制执行特定长度的字符串或比命令行提供的某些字符长的字符串?
    【解决方案2】:

    您可以使用 SetProperty 元素来更改 USERLEVEL 属性值。您可以使用 (USERLEVEL4) 条件来检查值,但如果最终用户传递任何非整数值(如“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>   
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-26
      相关资源
      最近更新 更多