有没有办法检测主机操作系统是 XP、Vista、7、8 还是 10?
runtime.GOOS
只返回“windows”。
这是因为我试图操作启动文件夹中的文件。
在 Windows Vista、7、8、10 上,它位于:
%appdata%\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
在 Windows XP 上它位于:
Documents and Settings\%username%\Start Menu\Programs\Startup
最佳答案
为什么不使用 windows 注册表?
https://godoc.org/golang.org/x/sys/windows/registry
How to return a default value from windows/registry with golang
package main
import (
"golang.org/x/sys/windows/registry"
"log"
"fmt"
)
func main() {
k, err := registry.OpenKey(registry.LOCAL_MACHINE, `SOFTWARE\Microsoft\Windows NT\CurrentVersion`, registry.QUERY_VALUE)
if err != nil {
log.Fatal(err)
}
defer k.Close()
cv, _, err := k.GetStringValue("CurrentVersion")
if err != nil {
log.Fatal(err)
}
fmt.Printf("CurrentVersion: %s\n", cv)
pn , _, err := k.GetStringValue("ProductName")
if err != nil {
log.Fatal(err)
}
fmt.Printf("ProductName: %s\n", pn)
maj, _, err := k.GetIntegerValue("CurrentMajorVersionNumber")
if err != nil {
log.Fatal(err)
}
fmt.Printf("CurrentMajorVersionNumber: %d\n", maj)
min, _, err := k.GetIntegerValue("CurrentMinorVersionNumber")
if err != nil {
log.Fatal(err)
}
fmt.Printf("CurrentMinorVersionNumber: %d\n", min)
cb, _, err := k.GetStringValue("CurrentBuild")
if err != nil {
log.Fatal(err)
}
fmt.Printf("CurrentVersion: %s\n", cb)
}
返回:
PS C:\Users\Adamar\Desktop> .\WindowsVersion.exe
CurrentVersion: 6.3
ProductName: Windows Server 2016 Standard Evaluation
CurrentMajorVersionNumber: 10
CurrentMinorVersionNumber: 0
CurrentVersion: 14393
尽管在最新版本的 Windows 中,您必须阅读以下键才能获取版本:CurrentMajorVersionNumber & CurrentMinorVersionNumber
关于windows - 在 Go 中检测 windows 版本以找出启动文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44363911/