// Copyright 2016 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package os import ( "internal/syscall/windows" "syscall" ) func getModuleFileName(handle syscall.Handle) (string, error) { n := uint32(1024) var buf []uint16 for { buf = make([]uint16, n) r, err := windows.GetModuleFileName(handle, &buf[0], n) if err != nil { return "", err } if r < n { break } // r == n means n not big enough n += 1024 } return syscall.UTF16ToString(buf), nil } func executable() (string, error) { return getModuleFileName(0) }