@@ -2,7 +2,7 @@ package idea
2
2
3
3
import (
4
4
"golang.org/x/sys/windows"
5
- "strings "
5
+ "os/exec "
6
6
"syscall"
7
7
)
8
8
@@ -17,52 +17,26 @@ type windowsExec struct {
17
17
dir string
18
18
}
19
19
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
-
37
20
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 ,
47
27
}
48
- return syscall .CreateProcess (
49
- nil , program ,
50
- nil , nil , false , windows .CREATE_NEW_CONSOLE , nil ,
51
- workdir , startupInfo , & procInfo )
28
+ return cmd .Start ()
52
29
}
53
30
54
31
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 ,
58
38
}
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 ()
66
40
}
67
41
func (a windowsExec ) SetDir (dir string ) ExecInterface {
68
42
return windowsExec {dir : dir }
0 commit comments