2012-11-09 51 views
17

Khi cài đặt một ứng dụng có thể sử dụng .NET 4.0 hoặc 4.5, thực hành tốt nhất khi cài đặt các điều kiện tiên quyết .NET framework là gì? Và làm thế nào để bạn thực hiện nó bằng cách sử dụng Burn trong WiX?Cách cài đặt .NET .NET 4.x bằng cách sử dụng WiX Burn

Đây là những lựa chọn và thỏa hiệp mà tôi biết:

Lựa chọn 1: Cài đặt .NET 4.0 (chỉ là những gì bạn cần)

  • Ưu điểm: Không biết (trừ windows XP, nơi đây là lựa chọn duy nhất)

Lựa chọn 2: Cài đặt .NET 4.5 nếu .NET 4.5 là không có mặt

012.
  • Ưu điểm: Người dùng sẽ không phải cài đặt .NET 4.5 sau này cho các ứng dụng tương lai. Ứng dụng sẽ không gặp phải sự thay đổi phiên bản .NET khi người dùng sau đó thực hiện nâng cấp lên .NET 4.5. Ứng dụng ngay lập tức được cải thiện hiệu suất của .NET 4.5.

Lựa chọn 3: Cài đặt .NET 4.5 chỉ nếu không phải .NET 4.x hiện diện

  • Ưu điểm: triển khai nhanh hơn nhiều so với phương án 2 nếu .NET 4.0 được đã được cài đặt. Nếu không, thì ưu điểm của tùy chọn 2 sẽ được áp dụng.

Theo như tôi có thể nói, cách tốt nhất sẽ là tùy chọn 2 nếu cải tiến hiệu suất là quan trọng và tùy chọn 3 nếu tốc độ triển khai trung bình là quan trọng. Điều này có đúng không? Tôi có thiếu bất kỳ lợi thế nào cho tùy chọn 1 không? Quan trọng nhất, nếu tùy chọn 3 có ý nghĩa, làm thế nào để bạn thực hiện nó bằng cách sử dụng Burn khi cài đặt .NET từ web?

Trả lời

24

Dưới đây là cách tôi phát hiện .NET trong gói của mình. Lưu ý việc sử dụng DetectConditions và InstallConditions. DetectCondition sẽ kiểm tra xem gói cài đặt cụ thể có được cài đặt hay không, trong khi InstallCondition có thể được sử dụng để ghi đè lên DetectCondition để chỉ định khi nào gói nên được cài đặt. Ví dụ, trên XP bạn không thể cài đặt .NET 4.5 vì vậy InstallCondition của tôi ngăn cản cài đặt trong trường hợp này.

<util:RegistrySearch Root="HKLM" Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full" Value="Version" Variable="Netfx4FullVersion" /> 
<util:RegistrySearch Root="HKLM" Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full" Value="Version" Variable="Netfx4x64FullVersion" Win64="yes" /> 

<!-- .NET 4.5 only installed if Vista or higher AND it's not already installed--> 
<PackageGroup Id="Netfx45"> 
    <ExePackage Id="Netfx45" Cache="no" Compressed="yes" PerMachine="yes" Permanent="yes" Vital="yes" InstallCommand="/q" 
       SourceFile="C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\DotNetFX45Full\dotnetfx45_full_x86_x64.exe" 
       DetectCondition="(Netfx4FullVersion=&quot;4.5.50709&quot;) AND (NOT VersionNT64 OR (Netfx4x64FullVersion=&quot;4.5.50709&quot;))" 
       InstallCondition="(VersionNT >= v6.0 OR VersionNT64 >= v6.0) AND (NOT (Netfx4FullVersion=&quot;4.5.50709&quot; OR Netfx4x64FullVersion=&quot;4.5.50709&quot;))"/> 
</PackageGroup> 
<!-- .NET 4.0 only installed if XP AND it's not already installed --> 
<PackageGroup Id="Netfx4Full"> 
    <ExePackage Id="Netfx4Full" Cache="no" Compressed="yes" PerMachine="yes" Permanent="yes" Vital="yes" InstallCommand="/q" 
       SourceFile="C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\DotNetFX40\dotNetFx40_Full_x86_x64.exe" 
       DetectCondition="Netfx4FullVersion AND (NOT VersionNT64 OR Netfx4x64FullVersion)" 
       InstallCondition="(VersionNT &lt; v6.0 OR VersionNT64 &lt; v6.0) AND (NOT (Netfx4FullVersion OR Netfx4x64FullVersion))"/> 
</PackageGroup> 

Sau đó, nếu bạn muốn cài đặt một trong các gói, chỉ cần tham khảo nó trong chuỗi của bạn:

<Chain> 
    <PackageGroupRef Id='Netfx45'/> 
</Chain> 

Liên quan đến câu hỏi cụ thể của bạn, tôi sẽ cài đặt bất kỳ phiên bản framework ứng dụng đã được thử nghiệm chống lại . Nếu được thử nghiệm với cả .NET 4.0 và .NET 4.5, tôi cho rằng đó là một cuộc gọi phán đoán, tuy nhiên tôi sẽ cố gắng đơn giản hóa trải nghiệm thiết lập càng nhiều càng tốt. Vì vậy, nếu .NET 4.0 đã được cài đặt và ứng dụng không yêu cầu .NET 4.5, tôi sẽ không cài đặt nó.

Ngoài ra, có một bất lợi với Tùy chọn 2 nếu bạn đang sử dụng Ứng dụng quản lý khởi động tùy chỉnh. Giả sử bạn đã cài đặt .NET 4.0 và bootstrapper được quản lý của bạn yêu cầu .NET 4.0 (hoặc cao hơn). Khi bạn chạy trình cài đặt, nó sẽ cài đặt .NET 4.5 thay thế .NET 4.0, buộc trình cài đặt của bạn khởi động lại nửa chừng vì nó đang sử dụng .NET framework cùng một lúc nó đang được cập nhật.Một lần nữa, đây chỉ là vấn đề nếu bạn đang sử dụng bootstrapper được quản lý tùy chỉnh của riêng mình.

+1

Trong trường hợp của tôi, tôi muốn sử dụng trình cài đặt web thông qua nhóm gói ** NetFx45Web ** của WixNetfxExtension. Tôi đã cập nhật Câu hỏi cho phù hợp. Có tương đương với ** InstallCondition ** khi làm việc với nhóm gói cài sẵn không? –

+0

InstallConditions là trên các gói bản thân (ExePackage, MsiPackage). Ngoài ra, hướng dẫn WiX hiện tại không liệt kê bất kỳ thuộc tính .NET 4.5 nào để cho biết nó có được cài đặt hay không. Tôi nghĩ rằng những hạn chế này là lý do tại sao tôi không sử dụng NetfxExtension cho thiết lập của mình. IMO, nếu bạn muốn cài đặt .NET 4.5 bằng cách sử dụng NetfxExtension, bạn có thể chỉ cần thêm nhóm gói NetFx45Web, sau đó đặt điều kiện trên bản cài đặt để chỉ chạy trên Vista hoặc cao hơn. Sau đó, nếu bạn cần cài đặt XP, hãy tạo một dự án hoặc cấu hình riêng biệt để tạo một trình cài đặt riêng biệt. – BryanJ

+0

Có cách nào không quá khó để thực hiện cài đặt web của .NET mà không có NetfxExtension không? –

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