我想在安裝過程中驗證用戶給定的WiX中命令行屬性的值。如果該屬性的值不是特定集合中的值,則應該採用默認值並創建一個註冊表項。驗證WiX中的命令行參數
例如,屬性USERLEVEL應該具有值1-4。如果用戶指定任何其他值,它應該默認爲1並將其寫入註冊表。安裝程序沒有UI組件,我們希望使用某些條件語句來執行此操作。
我想在安裝過程中驗證用戶給定的WiX中命令行屬性的值。如果該屬性的值不是特定集合中的值,則應該採用默認值並創建一個註冊表項。驗證WiX中的命令行參數
例如,屬性USERLEVEL應該具有值1-4。如果用戶指定任何其他值,它應該默認爲1並將其寫入註冊表。安裝程序沒有UI組件,我們希望使用某些條件語句來執行此操作。
您可以使用SetProperty元素更改USERLEVEL屬性值。您可以使用(USERLEVEL < 1或USERLEVEL > 4)條件來檢查該值,但如果最終用戶傳遞任何非整數值(如「A」),該條件將不起作用。
<Property Id="USERLEVEL" Secure="yes" />
<SetProperty Id="USERLEVEL" Value="1" After="AppSearch">
USERLEVEL<>1 AND USERLEVEL<>2 AND USERLEVEL<>3 AND USERLEVEL<>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>
這可以通過「啓動條件」來完成。作爲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>0 AND USERLEVEL<5
</Condition>
我用了>
和<
而非CDATA
包裝的情況,但你可以做到這一點,只要你喜歡。最終的結果是你想要條件說出類似USERLEVEL > 0 and USERLEVEL < 5
(或者如果你喜歡:USERLEVEL >=1 AND USERLEVEL <= 4
)。
有沒有辦法檢查提供的字符串的長度?即,如果我想強制執行僅限特定長度的字符串或長於從命令行提供的某些特定數量的字符? – user1552175 2014-11-12 22:43:52