Dot-Net

如何使用 WiX 包安裝 .NET 4.5?

  • September 11, 2014

我需要在我的安裝包中包含 Microsoft .NET 4.5 作為先決條件,並且我希望它盡可能自動化。但是,解除安裝時不應刪除.NET 。我想我已經閱讀了有關如何使用DetectCondition和/或的所有內容InstallCondition,但我仍然沒有正確理解;它要麼總是執行 .NET 安裝,要麼從不執行它。

這是我的最新設置:

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
    xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
    xmlns:bal="http://schemas.microsoft.com/wix/BalExtension"
    xmlns:netfx='http://schemas.microsoft.com/wix/NetFxExtension'>

 <!-- Define minimum .NET Framework version -->
 <?define NetFx45MinRelease = 377811?>
 ...
   <Chain>
     <PackageGroupRef Id="Netfx45FullPackage"/>
     ...
   </Chain>

   <PackageGroup Id="Netfx45FullPackage">
     <ExePackage Id="Netfx45Full" Cache="no" Compressed="yes" PerMachine="yes" Permanent="yes" Vital="yes"
                 SourceFile="..\..\..\..\Environment\InstallerResources\Prerequisites\dotnetfx45_full_x86_x64.exe"
                 InstallCommand="/passive /norestart"
                 DetectCondition="NETFRAMEWORK45 >= $(var.NetFx45MinRelease)"
                 InstallCondition="NOT REMOVE AND (NETFRAMEWORK45 < $(var.NetFx45MinRelease))" />
   </PackageGroup>

(出於某種原因,我必須定義NetFx45MinRelease自己,即使它應該包含在 WixNetFxExtension 中。)

我怎樣才能得到正確的設置?

我不太清楚你為什麼會遇到問題,但我只是有同樣的任務,它(現在;-)按預期工作。也就是說,它僅在需要時安裝.NET 4.5,並且在整個解除安裝引導程序時不會執行 .NET 解除安裝。

但是,.NET 4.5可以單獨解除安裝,我認為這很好。

這是我使用的(很可能來自其他 Stack Overflow 文章):

<PackageGroup Id="Netfx45Xxx">
   <ExePackage Id="Netfx45Xxx" Cache="no" Compressed="no" PerMachine="yes" Permanent="yes" Vital="yes" InstallCommand="/q"
       SourceFile="C:\wixtest\dotnetfx45_full_x86_x64.exe"
       DetectCondition="(Netfx4FullVersion="4.5.50709") AND (NOT VersionNT64 OR (Netfx4x64FullVersion="4.5.50709"))"
       InstallCondition="(VersionNT >= v6.0 OR VersionNT64 >= v6.0) AND (NOT (Netfx4FullVersion="4.5.50709" OR Netfx4x64FullVersion="4.5.50709"))"/>
</PackageGroup>

奇怪的是,您已經擁有 Permanent=“yes”,這確實是保持 .NET 處於解除安裝狀態的關鍵。

一個區別是我在 InstallCondition 中沒有明確的“NOT REMOVE”,也許這比對 Windows Installer 的幫助更令人困惑…?

我正在使用目前最新的 WiX 3.7.1224.0。


TheESJ 的回答有一條評論:即使使用預定義的 PackageGroupRef,您也可以提供本地文件以避免下載。只需將它放在您的引導程序 EXE 文件下方的“redist”文件夾中,如果存在而不下載,它將從那裡獲取。我昨天在安裝錯誤後通過日誌文件發現了這種行為。

引用自:https://stackoverflow.com/questions/13513664