初始化项目
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
//go:build windows
|
||||
// +build windows
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
"os/exec"
|
||||
"strconv"
|
||||
"syscall"
|
||||
|
||||
"golang.org/x/sys/windows"
|
||||
)
|
||||
|
||||
type mainProgramStarter struct{}
|
||||
|
||||
func (s *mainProgramStarter) GetMainName() string {
|
||||
return "main.exe"
|
||||
}
|
||||
|
||||
func (s *mainProgramStarter) Start(targetExe string) error {
|
||||
cmd := exec.Command(targetExe)
|
||||
cmd.Stdout = os.Stdout
|
||||
cmd.Stderr = os.Stderr
|
||||
|
||||
// Windows:新进程组,脱离 Ctrl+C / 父进程
|
||||
cmd.SysProcAttr = &syscall.SysProcAttr{
|
||||
CreationFlags: syscall.CREATE_NEW_PROCESS_GROUP,
|
||||
}
|
||||
|
||||
return cmd.Start()
|
||||
}
|
||||
|
||||
// 判断进程是否在运行
|
||||
func (s *mainProgramStarter) IsProcessRunning(pid int) (bool, error) {
|
||||
if pid <= 0 {
|
||||
return false, nil
|
||||
}
|
||||
|
||||
// 打开进程句柄
|
||||
handle, err := windows.OpenProcess(windows.PROCESS_QUERY_LIMITED_INFORMATION, false, uint32(pid))
|
||||
if err != nil {
|
||||
// 权限不足,但进程存在
|
||||
if err == windows.ERROR_ACCESS_DENIED {
|
||||
return true, nil
|
||||
}
|
||||
// 进程不存在
|
||||
if err == windows.ERROR_INVALID_PARAMETER {
|
||||
return false, nil
|
||||
}
|
||||
// 其他错误
|
||||
return false, err
|
||||
}
|
||||
defer windows.CloseHandle(handle)
|
||||
|
||||
return true, nil
|
||||
}
|
||||
|
||||
// 杀掉进程
|
||||
func (w *mainProgramStarter) KillProcess(pid int) error {
|
||||
cmd := exec.Command("taskkill", "/PID", strconv.Itoa(pid), "/F")
|
||||
return cmd.Run()
|
||||
}
|
||||
Reference in New Issue
Block a user