mirror of
https://github.com/tailscale/tailscale.git
synced 2025-02-27 10:47:35 +00:00
portlist: set SysProcAttr.HideWindow on Windows
Prevents annoying shell window flashes when running /server by hand.
This commit is contained in:
parent
07ca0c1c29
commit
2ca2389c5f
@ -13,12 +13,22 @@ import (
|
|||||||
exec "tailscale.com/tempfork/osexec"
|
exec "tailscale.com/tempfork/osexec"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var osHideWindow func(*exec.Cmd) // non-nil on Windows; see portlist_windows.go
|
||||||
|
|
||||||
|
// hideWindow returns c. On Windows it first sets SysProcAttr.HideWindow.
|
||||||
|
func hideWindow(c *exec.Cmd) *exec.Cmd {
|
||||||
|
if osHideWindow != nil {
|
||||||
|
osHideWindow(c)
|
||||||
|
}
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
|
||||||
func listPortsNetstat(arg string) (List, error) {
|
func listPortsNetstat(arg string) (List, error) {
|
||||||
exe, err := exec.LookPath("netstat")
|
exe, err := exec.LookPath("netstat")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("netstat: lookup: %v", err)
|
return nil, fmt.Errorf("netstat: lookup: %v", err)
|
||||||
}
|
}
|
||||||
output, err := exec.Command(exe, arg).Output()
|
output, err := hideWindow(exec.Command(exe, arg)).Output()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
xe, ok := err.(*exec.ExitError)
|
xe, ok := err.(*exec.ExitError)
|
||||||
stderr := ""
|
stderr := ""
|
||||||
|
@ -5,7 +5,10 @@
|
|||||||
package portlist
|
package portlist
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
exec "tailscale.com/tempfork/osexec"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Forking on Windows is insanely expensive, so don't do it too often.
|
// Forking on Windows is insanely expensive, so don't do it too often.
|
||||||
@ -18,3 +21,9 @@ func listPorts() (List, error) {
|
|||||||
func addProcesses(pl []Port) ([]Port, error) {
|
func addProcesses(pl []Port) ([]Port, error) {
|
||||||
return listPortsNetstat("-nab")
|
return listPortsNetstat("-nab")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
osHideWindow = func(c *exec.Cmd) {
|
||||||
|
c.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user