Skip to content

Commit b29e95d

Browse files
committed
feat: use go exec to implement windows create process
1 parent 2f8e139 commit b29e95d

File tree

1 file changed

+15
-41
lines changed

1 file changed

+15
-41
lines changed

pkg/idea/idea_windows.go

+15-41
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package idea
22

33
import (
44
"golang.org/x/sys/windows"
5-
"strings"
5+
"os/exec"
66
"syscall"
77
)
88

@@ -17,52 +17,26 @@ type windowsExec struct {
1717
dir string
1818
}
1919

20-
func (a windowsExec) program(name string, args ...string) (cmdLine *uint16, workdir *uint16, err error) {
21-
program := name
22-
if len(args) != 0 {
23-
program += " " + strings.Join(args, " ")
24-
}
25-
program = strings.Replace(program, `/`, `\\`, -1)
26-
cmdLine, err = windows.UTF16PtrFromString(program)
27-
if err != nil {
28-
return
29-
}
30-
31-
if a.dir != "" {
32-
workdir = windows.StringToUTF16Ptr(strings.Replace(a.dir, `/`, `\\`, -1))
33-
}
34-
return
35-
}
36-
3720
func (a windowsExec) Command(name string, args ...string) error {
38-
program, workdir, err := a.program(name, args...)
39-
if err != nil {
40-
return err
41-
}
42-
43-
var procInfo syscall.ProcessInformation
44-
startupInfo := &syscall.StartupInfo{
45-
Flags: windows.STARTF_USESHOWWINDOW,
46-
ShowWindow: windows.SW_NORMAL,
21+
cmd := exec.Command(name, args...)
22+
cmd.Dir = a.dir
23+
cmd.SysProcAttr = &syscall.SysProcAttr{
24+
HideWindow: false,
25+
CreationFlags: windows.CREATE_NEW_CONSOLE,
26+
NoInheritHandles: true,
4727
}
48-
return syscall.CreateProcess(
49-
nil, program,
50-
nil, nil, false, windows.CREATE_NEW_CONSOLE, nil,
51-
workdir, startupInfo, &procInfo)
28+
return cmd.Start()
5229
}
5330

5431
func (a windowsExec) CreateProcess(name string, args ...string) error {
55-
program, workdir, err := a.program(name, args...)
56-
if err != nil {
57-
return err
32+
cmd := exec.Command(name, args...)
33+
cmd.Dir = a.dir
34+
cmd.SysProcAttr = &syscall.SysProcAttr{
35+
HideWindow: true,
36+
CreationFlags: windows.CREATE_NEW_CONSOLE | windows.CREATE_NO_WINDOW,
37+
NoInheritHandles: true,
5838
}
59-
60-
var procInfo syscall.ProcessInformation
61-
startupInfo := &syscall.StartupInfo{}
62-
return syscall.CreateProcess(
63-
nil, program,
64-
nil, nil, false, windows.CREATE_NO_WINDOW, nil,
65-
workdir, startupInfo, &procInfo)
39+
return cmd.Start()
6640
}
6741
func (a windowsExec) SetDir(dir string) ExecInterface {
6842
return windowsExec{dir: dir}

0 commit comments

Comments
 (0)