2009-07-21 4 views
14

Tôi đang cố gắng tạo ra Windows intaller đơn giản và tôi không biết cách xử lý vấn đề này. Tôi có hai tính năng - feature1 và feature2. Tôi muốn tính năng2 chỉ được cài đặt nếu người dùng đã chọn tính năng1 được cài đặt. Vì vậy, tôi đã thử:Cách sử dụng các điều kiện trong các tính năng trong WiX?

<Feature Id='core' Title='Core' 
     Description='ØMQ 1.0.0 core functionality and C++ API' Level='1'> 
    <ComponentRef Id='Core_include' /> 
    <ComponentRef Id='Core_bin' /> 
    <ComponentRef Id='Core_lib' /> 
    <ComponentRef Id='Core_zmq' /> 
    <ComponentRef Id='cpp_bin' /> 
</Feature> 

<Feature Id='core_perf' Title='core_perf' Description='0MQ core perf' Level='999'> 
    <Condition Level="0">NOT (&amp;core = "3")</Condition> 
     <ComponentRef Id='cpp_perf' /> 
</Feature> 

Nhưng điều này không cài đặt tính năng core_perf nếu người dùng chọn lõi tính năng.

Làm cách nào để khắc phục sự cố này?

+0

Bằng ý nghĩa nghiêm ngặt "chỉ khi" có vẻ như tính năng 1 và feature2 thực sự chỉ là một tính năng. Bạn có thực sự có nghĩa là feature2 chỉ nên khả dụng nếu feature1 được cài đặt? – Jared

+0

Vâng, đúng vậy. Tôi muốn tính năng2 được cài đặt CHỈ NẾU tính năng1 được cài đặt. –

+0

Để giải thích - ứng dụng của tôi có nhiều tính năng khác nhau và sau đó tôi có phần ví dụ hiển thị các ví dụ về cách sử dụng các tính năng này. Tôi muốn nếu ai đó chọn "feature1" và tính năng "ví dụ" (bao gồm các ví dụ về tất cả các tính năng), sau đó tôi muốn tính năng "feature1_examples" được cài đặt. –

Trả lời

14

Bạn cần chuyển Điều kiện của mình sang định nghĩa Thành phần và sử dụng! (Tính năng nhà nước) thay vì & (hành động Feature) để nó hoạt động khi bạn cố gắng thêm các ví dụ bằng cách chạy lại cài đặt một lần thứ hai:

<Component Id="example1"> 
    <Condition>!feature1 = 3</Condition> 
</Component> 

<Component Id="example2"> 
    <Condition>!feature2 = 3</Condition> 
</Component> 

<Feature Id="feature1"> 
</Feature> 

<Feature Id="feature2"> 
</Feature> 

<Feature Id="examples"> 
    <ComponentRef Id="example1" /> 
    <ComponentRef Id="example2" /> 
</Feature> 
+3

Tài liệu này ở đâu? Trạng thái tính năng =! và Tính năng hành động = &. – Cheeso

+10

http://msdn.microsoft.com/en-us/library/aa368012(VS.85).aspx http://www.tramontana.co.hu/wix/lesson6.php#6.2 – Jared

+0

Điều này có thể tốt với một số thành phần, nhưng khó quản lý nếu bạn có số lượng lớn các thành phần. –

6

Tôi nghĩ rằng nó sẽ là tốt nhất nếu feature1 phụ huynh của feature2. Sau đó, feature2 không thể được cài đặt trừ khi feature1 cũng sẽ được cài đặt. Không có điều kiện cần thiết.

<Feature Id='core' Title='Core' 
     Description='ØMQ 1.0.0 core functionality and C++ API' Level='1'> 
    <ComponentRef Id='Core_include' /> 
    <ComponentRef Id='Core_bin' /> 
    <ComponentRef Id='Core_lib' /> 
    <ComponentRef Id='Core_zmq' /> 
    <ComponentRef Id='cpp_bin' /> 
    <Feature Id='core_perf' Title='core_perf' Description='0MQ core perf' 
      Level='999'> 
     <ComponentRef Id='cpp_perf' /> 
    </Feature> 
</Feature>