Dot-Net
如何使用 WiX 包安裝 .NET 4.5?
我需要在我的安裝包中包含 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”文件夾中,如果存在而不下載,它將從那裡獲取。我昨天在安裝錯誤後通過日誌文件發現了這種行為。