在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.UTF16ToStringbuffer转换为字符串并打印出来。

请注意,上述代码仅适用于Windows平台,并且需要Go版本1.20以上。如果你使用的是较早的Go版本,可能需要更新到1.20以上才能使用

使用golang语言根据一个进程的PID获取到该程序的全路径可以只关注windows平台golang120版本以上支持

原文地址: https://www.cveoy.top/t/topic/ic9e 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录