从go获取Windows全名的最佳方法是什么?

时间:2015-10-22 15:47:23

标签: go

在Windows中,我可以运行类似systeminfo | findstr /C:"OS Name的内容来将Windows全名输出到控制台。我尝试了从一个命令到另一个命令的几个不同的管道输出变化,但我只是得到空字符串。

示例

first := exec.Command("systeminfo")
second := exec.Command("findstr /C:'OS Name'")

reader, writer := io.Pipe()

first.Stdout = writer
second.Stdin = reader

var buffer bytes.Buffer
second.Stdout = &buffer

first.Start()
second.Start()
first.Wait()
writer.Close()
second.Wait()

output := buffer.String()

log.Printf("output: %s", output)

`

是否有任何内置方法可以获取此信息?

1 个答案:

答案 0 :(得分:1)

一种方法是使用golang.org/x/sys/windows/registry包。

一个简单的例子:

package main

import (
    "fmt"
    "golang.org/x/sys/windows/registry"
)

func main() {
    key, _ := registry.OpenKey(registry.LOCAL_MACHINE, `SOFTWARE\Microsoft\Windows NT\CurrentVersion`, registry.QUERY_VALUE) // error discarded for brevity
    defer key.Close()
    productName, _, _ := key.GetStringValue("ProductName") // error discarded for brevity
    fmt.Println(productName)
}

这会在我的电脑上打印Windows 8.1 Pro