昨天分享 .NET Framework 4.6 編譯程式在版本只到 .NET 4.5.2 主機發生的詭異錯誤訊息,經讀者提醒我才想起今年 4/26 有件事,.NET Framework 4.5.2、4.6、4.6.1 要 EOS 了! 參考:.NET Framework 技術支援終止期限(EOS)整理

.NET 4.x 採「就地相容」政策,Windows 升級 .NET Framework 版本後,原本的 .NET 4.X 程式可繼續執行,不需要重新編譯或調整,基本上不算什麼大問題,可以想成一般的 Windows Update 或 Hotfix,出問題的機率不大,但升級前仍建議測試驗證一下,以求保險,若真有不相容狀況,多半是為了符合業界標準或修正錯誤,遇上就乖乖調整程式。

如何知道主機目前安裝的 .NET Framework 到 4.X?之前分享過列出已安裝 .NET Framework 版本的 PowerShell,時過境遷,現在只需關心主機有沒有裝到 .NET Framework 4.6.2 以上就好。

微軟有份新文件 - How to: Determine which .NET Framework versions are installed,便是聚焦判斷 4.5 之後的 .NET Framework 版本(4.5.2 之前的版本已 EOS,2.0/3.5 安裝 .NET 3.5 SP1 可用到 2029/1/9),由於 4.8 已是 .NET Framework 最後版本(後面就接 .NET Core 3.1/.NET 6 了),這個判斷方法已固定不會再改了。

其原理是由 Registry HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full 的 Release 六位數字判斷,Version 格式為 4.8.04084 比較好讀,但像 4.6.2 的 Version 為 4.6.01586,無法看出是 4.6、4.6.1 還是 4.6.2:

參考官方文件,我寫出以下 PowerShell:

$reg = Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full'
Write-Host "Build: $($reg.Version)"
$release = $reg.Release
Write-Host "Release: $release / " -NoNewline
switch ($release) {
    '378389' { '.NET 4.5' }
    '378675' { '.NET 4.5.1' <# Win 8.1/2012 R2 #> }
    '378758' { '.NET 4.5.1' }
    '379893' { '.NET 4.5.2' }
    '393295' { '.NET 4.6' <# Win 10 #> }
    '393297' { '.NET 4.6' }
    '394254' { '.NET 4.6.1' <# Win 10 Nov Update #> }
    '394271' { '.NET 4.6.1' }
    '394802' { '.NET 4.6.2' <# Win 10 Anniversary Update / Win 2016 #> }
    '394806' { '.NET 4.6.2' }
    '460798' { '.NET 4.7' <#  Win 10 Creators Update #> }
    '460805' { '.NET 4.7' }
    '461308' { '.NET 4.7.1' <# Win 10 Fall Creators / Win Server 1709 #> }
    '461310' { '.NET 4.7.1' }
    '461808' { '.NET 4.7.2' <# Win 10 Apr 2018  / Win Server 1803 #> }
    '461814' { '.NET 4.7.2' }
    '528040' { '.NET 4.8' <# Win 10 May 2019 / Win 10 Nov 2019 #> }
    '528372' { '.NET 4.8' <# Win 10 May 2020 / Win 10 Oct 2020 / Win 10 May 2021 #> }
    '528449' { '.NET 4.8' <# Win 11 / Win 2022 #> }
    '528049' { '.NET 4.8' }
    Default { "Unknown - $release" }
}

執行時會顯示 Version (我稱它為 Build,跟口語 4.6, 4.6.1 的 Version 區隔)、Realse 號碼跟判別的 4.X.X 版本:

如此,很快就能知道主機的 .NET 4.X 版本需不需要升級。

如果系統設定允許 PowerShell 遠端管理,我們可以用 Invoke-Command -ComputerName XXX -FilePath .\Check-NetFX45Version.ps1 查詢遠端主機的 .NET 4.X 版本,非常方便:

補充遠端執行 PowerShell 參考:

PowerShell script to check .NET Framework 4.5+ version.


Comments

Be the first to post a comment

Post a comment