2012-06-28 22 views
13

Tôi đã tạo dự án WIX trong Visual Studio 2010 hơn một năm trước. Nó tạo ra một tập tin MSI và một bootstrapper setup.exe. Trên thực tế, nó tạo ra cặp tệp đó cho hai ngôn ngữ - tiếng Anh và tiếng Pháp. Tôi vừa mới tích hợp dự án này vào các bản dựng TFS CI của chúng tôi. Tôi gặp sự cố khi xây dựng CI để tạo tệp bootstrapper setup.exe.Tạo bootstrappers WIX 3.6 được bản địa hoá.

Gần đây, chúng tôi đã nâng cấp Wix trên tất cả các máy chủ xây dựng của chúng tôi lên Wix 3.6 RC. Vì vậy, tôi nghĩ rằng tôi sẽ cung cấp cho Burn một thử thay vì sử dụng phong cách cũ của bootstrapper. Tôi đã thêm một dự án Bootstrapper mới vào giải pháp của mình. Dự án bootstrapper bao gồm một bundle.wx đơn giản chỉ tải MSI được tạo ra bởi dự án MSI cũ của tôi. Tuy nhiên, khi tôi cố gắng xây dựng tôi nhận được lỗi sau:

error LGHT0103: The system cannot find the file 'C:\Tf\Advantage\Dev\Solution\Configuration\LaunchPad.Wix\bin\Release\fr-fr\LaunchPad.msi;C:\Tf\Advantage\Dev\Solution\Configuration\LaunchPad.Wix\bin\Release\en-us\LaunchPad.msi'.

tham khảo gói của tôi trong bó trông như thế này:

<MsiPackage Id="MyApplication" SourceFile="$(var.LaunchPad.Wix.TargetPath)" /> 

LaunchPad.Wix là tên của dự án Wix MSI. Nếu tôi thay đổi dự án LaunchPad.Wix để xây dựng chỉ có một ngôn ngữ thì nó hoạt động tốt. Dường như với tôi như kiểu dự án bootstrapper không hỗ trợ xây dựng các tệp thiết lập cho nhiều ngôn ngữ. Điều này có đúng không? Bất kỳ đề xuất cho một workaround?

Sửa

Sau khi điều tra thêm, tôi tự hỏi, nếu dự án bootstrapper thậm chí hỗ trợ nội địa hóa. Tôi đã thử thiết lập dự án Wix MSI của mình để chỉ tạo fr-fr. Setup.exe là dự án bootstrapper của tôi được tạo bằng tiếng Anh. Khi tôi chỉnh sửa thuộc tính dự án cho dự án bootstrapper, trường "Nền văn hóa để xây dựng" bị khóa và để trống. Làm thế nào tôi có thể xây dựng một bootstrapper không phải tiếng anh? Điều này có khả thi không?

+0

Có một mẫu bản địa hóa bootstrapper - với mã nguồn - trong dự án CodePlex này: https://classicwixburntheme.codeplex.com/ –

Trả lời

20

Có một vài điều xảy ra ở đây:

  1. Nếu bạn sử dụng nhiều nền văn hóa, bạn không thể sử dụng TargetPath trong một cái gì đó bên ngoài MSBuild mà hy vọng một tên tập tin duy nhất. Như bạn đã tìm thấy, TargetPath là một danh sách các tệp được bản địa hoá đã được xây dựng. Tuy nhiên, bạn có thể sử dụng TargetPath nếu bạn đủ điều kiện ngôn ngữ đầu ra của gói .msi: <MsiPackage SourceFile="$(var.TestMsi.en-US.TargetPath)" Id="MsiEnUs" />

  2. Nếu bạn muốn tạo một bootstrapper có thể cài đặt cả hai/en-US và fr-FR, bạn sẽ cần liệt kê từng .msi gói riêng trong phần tử MsiPackage của riêng nó.

  3. Nếu bạn muốn tạo hai bootstrappers, một en-US và một fr-FR, bạn sẽ cần phải gọi bootstrapper .wixproj hai lần, một lần cho mỗi ngôn ngữ. Bootstrappers không hỗ trợ các "Cult" lừa - đó là vấn đề để sản xuất hai kết quả đầu ra từ một invocation duy nhất của MSBuild (chứng kiến ​​các vấn đề TargetPath).

Nếu bạn đang sử dụng WixStandardBootstrapperApplication, nó tự động cố gắng để bản địa hoá giao diện người dùng dựa trên người sử dụng ngôn ngữ giao diện người dùng, té ngửa ra ngôn ngữ hệ thống giao diện người dùng, và cuối cùng té ngửa ra tiếng Anh. Có vẻ cho các chuỗi cục bộ trong các thư mục được đặt tên theo các LCID, vì vậy bạn sẽ có trọng tải như thế này:

<Payload Name="1033\thm.wxl" SourceFile="..." /> 
<Payload Name="1036\thm.wxl" SourceFile="..." /> 

Thật không may, WixStandardBootstrapperApplication dây hiện đang có sẵn chỉ dành cho en-US. Đó là lý do tại sao một bootstrapper fr-FR hiển thị giao diện người dùng bằng tiếng Anh. Bạn cần phải bản địa hóa tệp nguồn WiX HyperlinkTheme.wxl hoặc RtfTheme.wxl (tùy thuộc vào chủ đề bạn sử dụng). Cả hai tệp này đều nằm trong src \ ext \ BalExtension \ wixstdba \ Resources.

+0

Các gói cài đặt en-US và fr-FR của chúng tôi giống hệt ngoại trừ chuỗi giao diện người dùng WIX. Bây giờ tôi nhận thấy rằng trình cài đặt ghi không hiển thị giao diện người dùng MSI. Có cách nào để có bootstrapper ghi sử dụng giao diện người dùng của MSI thay vì giao diện người dùng cháy? Nếu vậy, tôi có thể tạo hai dự án - một cho mỗi MSI (en-US và fr-FR). Âm thanh như tùy chọn khác của tôi sẽ là một bootstrapper duy nhất. Tôi muốn tạo giao diện người dùng trong ghi (với cả hai bản dịch en-US và fr-FR). Ghi sẽ hiển thị bản dịch phù hợp dựa trên cài đặt ngôn ngữ hệ điều hành của người dùng. Điều đó đúng đắn về phải không? –

+0

Phải. Nếu bạn bản địa hóa bootstrapper, bạn sẽ chỉ cần một .msi. Hoặc bạn có thể tiến xa hơn một bước và chuyển mã thành một .msi và tài nguyên được bản địa hóa thành một .msi cho mỗi ngôn ngữ. Nó sẽ không giúp bạn tiết kiệm nhiều chỉ với hai ngôn ngữ, nhưng tôi đã làm việc trên các sản phẩm đã xuất hàng tá ngôn ngữ và nó tiết kiệm không gian và vá đơn giản, vì bạn thường vá mã chứ không phải tài nguyên. –

+0

Tôi muốn tạo một bootstrapper có thể cài đặt en-US/fr-FR/ko-KO/th-TH/ar-SA/el-GR để tự động phát hiện ngôn ngữ hệ thống hiện tại, sau đó dịch chuỗi giao diện người dùng sang hệ thống laguage. Làm thế nào tôi có thể đạt được nó? Trong bootstrapper có một thẻ, thuộc tính WixStandardBootstrapperApplication/@ LocalizationFile, cần phải tự chọn, làm thế nào nó có thể tự động chọn nó theo ngôn ngữ hệ thống? –

4

tốt. nó hoạt động như Bob Arnson nói.

nhưng bạn phải chú ý đến tên và SourceFile của tải trọng.

<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense"> 
     <Payload Name="2052\thm.wxl" SourceFile="2052\thm.wxl" /> 
</BootstrapperApplicationRef> 

nếu bạn đổi tên thành tên khác. bootstrapper sẽ không được bản địa hóa.

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