2010-01-29 41 views
6

Tôi có một WiX bao gồm tập tin với đoạn mã sauCó cách nào để đặt biến tiền xử lý thành giá trị của thuộc tính không?

<Fragment Id="PropertyFragment"> 
    <Property Id="DynamicLanguageCode" Value="[SystemLanguageID]" /> 
    <?define productLanguage = [DynamicLanguageCode]?> 
</Fragment> 

Bây giờ trong thẻ sản phẩm của tôi trong kịch bản WiX của tôi, tôi muốn thiết lập các thuộc tính Language với giá trị của productLanguage, vì nó chỉ mất nguyên bản địa hóa. Có cách nào tôi có thể nhận được biến của tôi để được gán giá trị của tài sản?

Cảm ơn

Trả lời

22

Dường như có sự nhầm lẫn trong tâm trí của bạn về sự khác biệt giữa biến wix và thuộc tính trình cài đặt cửa sổ.

A biến wix có thể được tham chiếu là $(var.foo). Biến này có thể được xác định bằng cách chuyển các đối số dòng lệnh -d tới candle.exe. Nó cũng có thể được xác định bằng cú pháp <?define foo="bar"?>. Biến wix là một khái niệm chỉ tồn tại khi xây dựng thiết lập của bạn. Nó là một cái gì đó mà nó được điền vào bởi bộ tiền xử lý wix trước khi bất cứ điều gì khác xảy ra, giống như các câu lệnh #define trong C++.

A thuộc tính trình cài đặt Windows là thứ được điền trong khi cài đặt. Một cách để xác định các thuộc tính là đặt chúng trong Property table của một tệp MSI. Đây là phần tử Thuộc tính wix làm gì. Một số (nhưng không phải tất cả) data types được sử dụng trong cơ sở dữ liệu trình cài đặt Windows cho phép bạn tham chiếu thuộc tính như vậy với cú pháp [FOO]. Một ví dụ về kiểu dữ liệu hỗ trợ này là kiểu dữ liệu Shortcut, được sử dụng bởi thuộc tính Target của phần tử wix Shortcut. Các kiểu dữ liệu Language không không hỗ trợ điều này!

+0

Cảm ơn bạn đã làm rõ –

2

Nếu không có tranh cãi tại sao, điều này có thể được thực hiện như thế:

<Property Id="DynamicLanguageCode" Value="$(var.SystemLanguageID)" /> 
Các vấn đề liên quan