Files
4566704 96a3f73bda feat(dotnet): go-hua/netFramework 迁入并更名 dotnet(.NET Framework 信息)
- 原包名 netFramework 极易误读为网络框架, 实为读注册表的 .NET Framework
  安装信息, 更名 dotnet; 仅 Windows, 附测试、例程与 README
2026-09-20 12:29:37 +08:00

181 lines
4.1 KiB
Go

// Package dotnet 读取本机 .NET Framework 安装信息(Windows 注册表)。
package dotnet
import "golang.org/x/sys/windows/registry"
const (
V45MinValue = 378389
V451MinValue = 378675
V452MinValue = 379893
V46MinValue = 393295
V461MinValue = 394254
V462MinValue = 394802
V47MinValue = 460798
V471MinValue = 461308
V472MinValue = 461808
V48MinValue = 528040
V481MinValue = 533320
)
// V2Info .NET Framework 2.0 安装信息
type V2Info struct {
Install uint64
Version string
}
// V3Info .NET Framework 3.0 安装信息
type V3Info struct {
Install uint64
Version string
}
// V35Info .NET Framework 3.5 安装信息
type V35Info struct {
Install uint64
InstallPath string
Version string
}
// V4Info .NET Framework 4.x 安装信息
type V4Info struct {
Install uint64
InstallPath string
Release uint64
Version string
}
// GetV2Info 获取 .NET Framework 2.0 安装信息
func GetV2Info() (V2Info, error) {
key, err := registry.OpenKey(registry.LOCAL_MACHINE, "SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v2.0.50727", registry.READ)
info := V2Info{}
if err != nil {
return info, err
}
install, _, err := key.GetIntegerValue("Install")
if err != nil {
return info, err
}
version, _, err := key.GetStringValue("Version")
if err != nil {
return info, err
}
info.Install = install
info.Version = version
return info, nil
}
// GetV3Info 获取 .NET Framework 3.0 安装信息
func GetV3Info() (V3Info, error) {
key, err := registry.OpenKey(registry.LOCAL_MACHINE, "SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v3.0\\Setup", registry.READ)
info := V3Info{}
if err != nil {
return info, err
}
install, _, err := key.GetIntegerValue("InstallSuccess")
if err != nil {
return info, err
}
version, _, err := key.GetStringValue("Version")
if err != nil {
return info, err
}
info.Install = install
info.Version = version
return info, nil
}
// GetV35Info 获取 .NET Framework 3.5 安装信息
func GetV35Info() (V35Info, error) {
key, err := registry.OpenKey(registry.LOCAL_MACHINE, "SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v3.5", registry.READ)
info := V35Info{}
if err != nil {
return info, err
}
install, _, err := key.GetIntegerValue("Install")
if err != nil {
return info, err
}
installPath, _, err := key.GetStringValue("InstallPath")
if err != nil {
return info, err
}
version, _, err := key.GetStringValue("Version")
if err != nil {
return info, err
}
info.Install = install
info.InstallPath = installPath
info.Version = version
return info, nil
}
// GetV4Info 获取 .NET Framework 4.x 安装信息
func GetV4Info() (V4Info, error) {
key, err := registry.OpenKey(registry.LOCAL_MACHINE, "SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full", registry.READ)
info := V4Info{}
if err != nil {
return info, err
}
install, _, err := key.GetIntegerValue("Install")
if err != nil {
return info, err
}
installPath, _, err := key.GetStringValue("InstallPath")
if err != nil {
return info, err
}
release, _, err := key.GetIntegerValue("Release")
if err != nil {
return info, err
}
version, _, err := key.GetStringValue("Version")
if err != nil {
return info, err
}
info.Install = install
info.InstallPath = installPath
info.Release = release
info.Version = version
return info, nil
}
// CheckFor45PlusVersion 根据 Release 注册表值判断 .NET Framework 4.5+ 的具体版本
func CheckFor45PlusVersion(releaseKey int) string {
if releaseKey >= 533320 {
return "4.8.1 or later"
}
if releaseKey >= 528040 {
return "4.8"
}
if releaseKey >= 461808 {
return "4.7.2"
}
if releaseKey >= 461308 {
return "4.7.1"
}
if releaseKey >= 460798 {
return "4.7"
}
if releaseKey >= 394802 {
return "4.6.2"
}
if releaseKey >= 394254 {
return "4.6.1"
}
if releaseKey >= 393295 {
return "4.6"
}
if releaseKey >= 379893 {
return "4.5.2"
}
if releaseKey >= 378675 {
return "4.5.1"
}
if releaseKey >= 378389 {
return "4.5"
}
// This code should never execute. A non-null release key should mean
// 安装4.5或更高版本。
return "No 4.5 or later version detected"
}