使用golang语言根据一个进程的PID获取到该程序的全路径可以只关注windows平台golang120版本以上支持
在Go语言中,可以使用syscall包来获取一个进程的全路径。在Windows平台下,可以使用GetModuleFileNameEx函数来实现。
以下是使用Go语言获取进程全路径的示例代码:
package main
import (
"fmt"
"syscall"
"unsafe"
)
const (
PROCESS_QUERY_INFORMATION = 0x0400
PROCESS_VM_READ = 0x0010
)
func main() {
pid := 1234 // 你要获取全路径的进程的PID
handle, err := syscall.OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ, false, uint32(pid))
if err != nil {
fmt.Printf("OpenProcess failed: %v\n", err)
return
}
defer syscall.CloseHandle(handle)
var buffer [syscall.MAX_PATH]uint16
length := uint32(len(buffer))
_, err = syscall.QueryFullProcessImageName(handle, 0, &buffer[0], &length)
if err != nil {
fmt.Printf("QueryFullProcessImageName failed: %v\n", err)
return
}
fullPath := syscall.UTF16ToString(buffer[:length])
fmt.Printf("Full path of process %d: %s\n", pid, fullPath)
}
在上述代码中,首先使用OpenProcess函数打开一个进程的句柄,然后使用QueryFullProcessImageName函数获取该进程的全路径,并将结果保存在buffer中。最后,使用syscall.UTF16ToString将buffer转换为字符串并打印出来。
请注意,上述代码仅适用于Windows平台,并且需要Go版本1.20以上。如果你使用的是较早的Go版本,可能需要更新到1.20以上才能使用
原文地址: https://www.cveoy.top/t/topic/ic9e 著作权归作者所有。请勿转载和采集!