2012-11-09 37 views
17

安裝可以使用.NET 4.0或4.5的應用程序時,安裝必備組件.NET框架時的最佳做法是什麼?你如何使用WX中的Burn來實現它?如何使用WiX Burn智能安裝.NET 4.x

這是我所知道的選擇和權衡:

選項1:安裝.NET 4.0(你需要的東西)

  • 優點:未知(除Windows XP中,在那裏,這是唯一的選擇)

選項2:安裝.NET 4.5,如果.NET 4.5不存在

  • 優點:用戶將不必安裝.NET 4.5以後的未來 應用程序。當用戶稍後將 升級到.NET 4.5時,應用程序將不會遇到.NET版本更改。應用程序立即獲得性能提升 .NET 4.5。

方案3:安裝.NET 4.5只如果沒有.NET 4.x中存在

  • 優點:比選項2,如果.NET 4.0已安裝 更迅速地部署。如果不是,則選項2 的優點適用。

就我所知,如果性能改進很重要,最佳做法是選項2,如果平均部署速度很重要,則選項3。這聽起來正確嗎?我錯過了選項1的優勢嗎?最重要的是,如果選項3確實有意義,那麼在Web上安裝.NET時,如何使用Burn實現它?

回答

24

下面是我在我的包中檢測.NET的方法。請注意使用DetectConditions和InstallConditions。 DetectCondition將檢查是否安裝了特定軟件包,而InstallCondition可用於覆蓋DetectCondition以指定軟件包的安裝時間。例如,在XP上,您無法安裝.NET 4.5,因此我的InstallCondition會在這種情況下阻止安裝。

<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> 

然後,如果你想安裝的軟件包之一,只是參考它在你的鏈條:

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

至於你的具體問題,我會安裝任何框架版本的應用程序是針對測試。如果同時針對.NET 4.0和.NET 4.5進行測試,我認爲這是一個判斷性調用,但是我會嘗試儘可能簡化安裝體驗。所以如果.NET 4.0已經安裝並且應用程序不需要.NET 4.5,我就不會安裝它。

此外,如果使用自定義託管引導程序應用程序,則選項2存在缺陷。假設您安裝了.NET 4.0,並且您的託管引導程序需要.NET 4.0(或更高版本)。當您運行安裝程序時,它將安裝替換.NET 4.0的.NET 4.5,強制安裝程序在一半時間內重新啓動,因爲它在更新的同時使用了.NET框架。同樣,如果您使用自己的自定義託管引導程序,這只是一個問題。

+1

就我而言,我想通過WixNetfxExtension的** NetFx45Web **軟件包組使用Web安裝程序。我相應地更新了這個問題。使用內置包組時,是否有與** InstallCondition **等效的內容? –

+0

InstallConditions在包上(ExePackage,MsiPackage)。另外,目前的WiX手冊沒有列出任何.NET 4.5屬性來判斷它是否安裝。我認爲這些限制是爲什麼我沒有爲我的設置使用NetfxExtension。國際海事組織,如果你想使用NetfxExtension安裝.NET 4.5,你可能只需添加NetFx45Web軟件包組,然後將安裝條件設置爲僅在Vista或更高版本上運行。然後,如果您需要安裝XP,請創建單獨的項目或配置以生成單獨的安裝程序。 – BryanJ

+0

是否有一種不太困難的方式來在沒有NetfxExtension的情況下執行.NET的Web安裝? –