github.com/cloudfoundry-incubator/stembuild@v0.0.0-20211223202937-5b61d62226c6/package_stemcell/ovftool/ovftool_windows.go (about) 1 package ovftool 2 3 import ( 4 "fmt" 5 "golang.org/x/sys/windows/registry" 6 "os/exec" 7 ) 8 9 var keypaths = []string{ 10 `SOFTWARE\Wow6432Node\VMware, Inc.\VMware Workstation`, 11 `SOFTWARE\Wow6432Node\VMware, Inc.\VMware OVF Tool`, 12 `SOFTWARE\VMware, Inc.\VMware Workstation`, 13 `SOFTWARE\VMware, Inc.\VMware OVF Tool`, 14 } 15 16 // vmwareInstallPaths, returns the install paths of VMware Workstation and 17 // OVF Tool, which can be installed separately. 18 func vmwareInstallPaths(keypaths []string) ([]string, error) { 19 const regKey = registry.LOCAL_MACHINE 20 const access = registry.QUERY_VALUE 21 22 var key registry.Key 23 var err error 24 for _, path := range keypaths { 25 key, err = registry.OpenKey(regKey, path, access) 26 if err == nil { 27 break 28 } 29 } 30 if err != nil { 31 return nil, fmt.Errorf("opening VMware Workstation and OVF Tool registry keys: %s", err) 32 } 33 defer key.Close() 34 35 var paths []string 36 for _, k := range []string{"InstallPath64", "InstallPath"} { 37 var s string 38 s, _, err = key.GetStringValue(k) 39 if err == nil { 40 paths = append(paths, s) 41 } 42 } 43 44 if len(paths) == 0 { 45 return nil, fmt.Errorf("could not find VMware Workstation install path in registry: %s", err) 46 } 47 return paths, nil 48 } 49 50 func SearchPaths() ([]string, error) { 51 return vmwareInstallPaths(keypaths) 52 } 53 54 func Ovftool(installPaths []string) (string, error) { 55 const name = "ovftool.exe" 56 if path, err := exec.LookPath(name); err == nil { 57 return path, nil 58 } 59 60 for _, dir := range installPaths { 61 if path, err := findExecutable(dir, name); err == nil { 62 return path, nil 63 } 64 } 65 return "", &exec.Error{Name: name, Err: exec.ErrNotFound} 66 }