2013-09-23 31 views
5

Tôi có một ứng dụng yêu cầu .Net 4.0.3 (link).Phát hiện WiX .Net 4.0.3

Tôi đã tìm thấy this article cho tôi biết tôi sẽ tìm phiên bản.

Tôi đã thử làm theo các hướng dẫn trong this article, mà nói với tôi để sử dụng đoạn mã sau, nhưng điều này chỉ cài đặt Net 4 mà không có bản cập nhật:

<PropertyRef Id="NETFRAMEWORK40FULL"/> 

<Condition Message="This application requires .NET Framework 4.0.3. Please install the .NET Framework then run this installer again."> 
    <![CDATA[Installed OR NETFRAMEWORK40FULL]]> 
</Condition> 

Làm thế nào tôi sẽ đi về làm WiX kiểm tra bản cập nhật cụ thể 4.0.3, hoặc thông qua một tài sản WiX được xác định trước hoặc kiểm tra giá trị đăng ký bản thân mình?

Trả lời

4

Sau khi đọc xong, tôi đã kết thúc việc thêm dự án gói vào giải pháp tham chiếu Product chính trong dự án trình cài đặt WiX chuẩn (MyProject.Installer). Sau đó tôi đã sử dụng RegistrySearch để tìm phiên bản cài đặt đầy đủ .Net 4.

<Bundle ....> 
    <Chain> 
     <PackageGroupRef Id="Netfx4Full" /> 
     <PackageGroupRef Id="Netfx403Update" /> 
     <MsiPackage Id="MyMsi" SourceFile="$(var.MyProject.Installer.TargetPath)" Compressed="yes" DisplayInternalUI="yes" /> 
    </Chain> 
</Bundle> 
<Fragment> 
    <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" /> 
    <PackageGroup Id="Netfx4Full"> 
     <ExePackage Id="Netfx4Full" 
       Cache="no" 
       Compressed="yes" 
       PerMachine="yes" 
       Permanent="yes" 
       Vital="yes" 
       SourceFile="$(var.ProjectDir)dotNetFx40_Full_x86_x64.exe" 
       DownloadUrl="http://go.microsoft.com/fwlink/?LinkId=164193" 
       DetectCondition="Netfx4FullVersion AND (NOT VersionNT64 OR Netfx4x64FullVersion)" /> 
    </PackageGroup> 

    <PackageGroup Id="Netfx403Update"> 
     <ExePackage Id="Netfx403Update" 
       Cache="no" 
       Compressed="yes" 
       PerMachine="yes" 
       Permanent="yes" 
       Vital="yes" 
       SourceFile="$(var.ProjectDir)NDP40-KB2600211-x86-x64.exe" 
       DetectCondition="Netfx4FullVersion AND (Netfx4FullVersion &lt;&lt; &quot;4.0.3&quot; OR Netfx4FullVersion &lt;&lt; &quot;4.5&quot;)" /> 
    </PackageGroup> 
</Fragment> 

Điều kiện mở rộng ra Netfx4FullVersion AND (Netfx4FullVersion << "4.0.3" OR Netfx4FullVersion << "4.5") mà không cần thoát XML.

Các bài viết sau đây là hữu ích:

Bundle skeleton code

Bundle package manifest

Defining searches using WiX variables

Chaining packages into a bundle

How to check for .Net versions

+0

Hi, tôi không hiểu bạn đang làm gì với điều này? Bạn đang truy vấn phiên bản .NET framework, sẽ không thay đổi khi cài đặt bản cập nhật. Nếu .NET framework 4.0 được cài đặt, trường Phiên bản sẽ hiển thị 4.0.30319, bất kể bản cập nhật có được cài đặt hay không. Tôi có thiếu thứ gì đó trong giải pháp của bạn không? Nếu bạn không sử dụng HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Updates \ Microsoft .NET Framework 4 Mở rộng \ KB2600211 \? – Goran

+0

Nếu bạn tải xuống phiên bản mới nhất của khung .Net, bản cập nhật 4.0.3 có được bao gồm trong gói không? Tôi nhớ thử nghiệm điều này trên các máy ảo mới để đảm bảo trình cài đặt hoạt động chính xác. Nếu bạn đã thử điều này và nó không hoạt động và bạn có một giải pháp khác, hãy đăng nó. – Sean

+0

Không, nó không phải là một phần của .net 4.0 (chúng ta cần phải đợi cho sp). Tôi cũng đang thử nghiệm trên VM và giải pháp được đề xuất không hoạt động đúng cách. Bạn có thể tìm kiếm khóa đăng ký 4.0.3 (mà tôi đã đăng trong bài trước), tuy nhiên, tôi vẫn không chắc chắn rằng đây là cách chính xác (tìm kiếm khóa 4.0.3), vì trên máy nhà phát triển của tôi, tôi không có Đã cài đặt 4.0.3 và BCL không đồng bộ vẫn hoạt động (Tôi không biết liệu ứng dụng của bạn có yêu cầu bản cập nhật này do sử dụng BCL không đồng bộ) hay không. – Goran

3

Giá trị phiên bản trong khóa đăng ký "SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full" sẽ luôn là 4.0.30319 cho .net 4.0 (ngay cả khi đã cập nhật bản cập nhật).

Dưới đây là đoạn code tôi đã sử dụng trong bó của tôi để tìm kiếm nếu phiên bản .net 4.0.3 đã được cài đặt:

<util:RegistrySearch Root="HKLM" 
    Key="SOFTWARE\Microsoft\.NETFramework\v4.0.30319\SKUs\.NETFramework,Version=v4.0.3" 
    Result="exists" 
    Variable="Netfx403" /> 
<util:RegistrySearch Root="HKLM" 
    Key="SOFTWARE\Microsoft\.NETFramework\v4.0.30319\SKUs\.NETFramework,Version=v4.0.3" 
    Result="exists" 
    Variable="Netfx403x64" 
    Win64="yes" /> 

Sau đó, trong ExePackage DetectCondition của bạn:

DetectCondition="Netfx403 AND (NOT VersionNT64 OR Netfx403x64)" 
Các vấn đề liên quan