github.com/mhilton/juju-juju@v0.0.0-20150901100907-a94dd2c73455/version/osversion_windows.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Copyright 2015 Cloudbase Solutions SRL
     3  // Licensed under the AGPLv3, see LICENCE file for details.
     4  
     5  package version
     6  
     7  import (
     8  	"strings"
     9  
    10  	"github.com/gabriel-samfira/sys/windows/registry"
    11  	"github.com/juju/errors"
    12  )
    13  
    14  // currentVersionKey is defined as a variable instead of a constant
    15  // to allow overwriting during testing
    16  var currentVersionKey = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"
    17  
    18  func getVersionFromRegistry() (string, error) {
    19  	k, err := registry.OpenKey(registry.LOCAL_MACHINE, currentVersionKey, registry.QUERY_VALUE)
    20  	if err != nil {
    21  		return "", err
    22  	}
    23  	defer k.Close()
    24  	s, _, err := k.GetStringValue("ProductName")
    25  	if err != nil {
    26  		return "", err
    27  	}
    28  
    29  	return s, nil
    30  }
    31  
    32  func osVersion() (string, error) {
    33  	ver, err := getVersionFromRegistry()
    34  	if err != nil {
    35  		return "unknown", err
    36  	}
    37  	if val, ok := windowsVersions[ver]; ok {
    38  		return val, nil
    39  	}
    40  	for _, value := range windowsVersionMatchOrder {
    41  		if strings.HasPrefix(ver, value) {
    42  			if val, ok := windowsVersions[value]; ok {
    43  				return val, nil
    44  			}
    45  		}
    46  	}
    47  	return "unknown", errors.Errorf("unknown series %q", ver)
    48  }