feat(dotnet): go-hua/netFramework 迁入并更名 dotnet(.NET Framework 信息)
- 原包名 netFramework 极易误读为网络框架, 实为读注册表的 .NET Framework 安装信息, 更名 dotnet; 仅 Windows, 附测试、例程与 README
This commit is contained in:
@@ -0,0 +1,180 @@
|
||||
// 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"
|
||||
}
|
||||
Reference in New Issue
Block a user