2011-10-02 25 views
6

Tôi có tài sản sau đây:Values ​​Wix Boolean tài sản Đừng Làm việc

<Property Id="UPDATEDB">1</Property> 

Một hộp kiểm trong UI ràng buộc để tài sản đó:

<Control Id="updateDatabase" Type="CheckBox" CheckBoxValue="1" Height="15" Width="95" X="20" Y="74" Text="Update Database" Property="UPDATEDB" /> 

Và một hành động Custom mà làm điều gì đó dựa trên giá trị của thuộc tính này

<CustomAction Id="RunDbMigration" Directory="INSTALLDIR" Return="check" 
      ExeCommand='[DBMIGRATIONDIR]\DbMigration.exe' /> 

<InstallExecuteSequence> 
    <Custom Action="RunDbMigration" After="InstallFinalize">UPDATEDB=1 AND NOT Installed</Custom> 
</InstallExecuteSequence> 

Nếu tôi cố gắng chuyển giá trị 0 cho UPDATEDB từ dòng lệnh:

msiexec /i "Setup.msi" /l* UPDATEDB=0 

hoặc

msiexec /i "Setup.msi" /l* UPDATEDB="0" 

giá trị của hộp kiểm được kiểm tra anyway. Điều đó nói rằng, 0 được truyền vào dường như được tôn trọng và hành động RunDbMigration không chạy ...

Điều gì đang xảy ra ở đây? Tại sao khoa học tên lửa như vậy?

Trả lời

5

Như những người khác đã đề cập đến , Hộp kiểm không phải là boolean theo nghĩa 1/0, chúng là boolean theo nghĩa null/null.

Để unset từ dòng lệnh - bạn sẽ muốn sử dụng cái gì đó như

msiexec /i "Setup.msi" /l* UPDATEDB="" 

Rất có thể rằng tình trạng của bạn đang tìm kiếm đặc biệt cho các giá trị của 1 trước khi thực hiện hành động tùy chỉnh của bạn, đó là lý do isn CA của bạn không được chạy.

+1

Bingo. Cảm ơn. Đi qua trong UPDATEDB = "" đã làm các trick. Tôi hiểu tại sao hành động tùy chỉnh của tôi không chạy, nhưng không phải lý do tại sao hộp kiểm vẫn được chọn. Bây giờ tôi hiểu rằng bất cứ điều gì đó không phải là "" có nghĩa là được kiểm tra. – Jeff

3

Thuộc tính trình cài đặt được đặt thành giá trị hoặc chúng không được đặt. Bên trong giá trị chỉ là một chuỗi, vì vậy "0", "1", "true" và "false" giống nhau.

Kiểm soát hộp kiểm được chọn khi thuộc tính của nó được đặt thành giá trị (không quan trọng gì) và không được chọn khi thuộc tính của sản phẩm trống.

dòng lệnh này thiết lập tài sản và kiểm tra hộp kiểm:

msiexec /i "Setup.msi" /l* UPDATEDB="0" 

dòng lệnh này không thiết lập thuộc tính, vì vậy các hộp kiểm không được chọn:

msiexec /i "Setup.msi" /l* 
+0

/Nhưng giá trị mặc định của UPDATEDB là 1 ... vì vậy nếu tôi không vượt qua nó trong dòng lệnh, hộp kiểm được chọn theo mặc định anyway ..... – Jeff

Các vấn đề liên quan