/* @desc 针对window下启动多个name相同但执行路径不同的exe进程,可根据exe进程名和进程的执行路径杀死进程
实际场景:同时启动max2014和max2016等多个max程序,想关掉其中某一个版本的Max,只能根据pid去关,pid则可以用name和执行路径去获取
@param appName string 进程名(例如:3dmax.exe)
@param appPath string 进程执行路径(例如:`C:\Program Files\Autodesk\3ds Max 2014\3dsmax.exe`)
@return bool 是否关掉,如果没有匹配到则也返回true
*/
func killProcessBynameAndPath(appName string,appPath string) (bool) {
//根据exe名称列出进程的具体信息
cmd := exec.Command("cmd", "/C", "wmic process where name='"+appName+"' get processid,executablepath,name")
output, _ := cmd.Output()
outputstr := string(output)
outputstr2 := strings.Split(outputstr,"\r\r\n")
for i,v := range outputstr2{
//第一个是列表名,直接跳过
if i>0 {
temps := strings.Split(v," ")
if len(temps)>=3 { //如果大于3,说明有执行路径,进程名,pid
if appPath == temps[0]{ //0是执行路径,如果传递进来的执行路径相等
for ii,vv := range temps{
if ii==2{ //下标是2的是pid,根据pid杀死进程
maxCloseC := exec.Command("taskkill.exe", "/pid", vv, "-t","-f")
maxCloseErr := maxCloseC.Run()
if maxCloseErr != nil {
return false
}
return true
}
}
}
}
}
}
return true
}