![](/img/trans.png)
[英]Get program name from executable path (or from hWnd, or from pid) in C++
[英]Get path to “binary file”/“executable” from pid using boost?
我正在尝试编写一个例程,该例程从给定的PID路径返回到其二进制文件或可执行文件,具体取决于平台。 我知道它可以在Windows上使用windows.h完成,但这是依赖于平台的解决方案。
我试图使用Qt找到一个解决方案,但我无法接近我的目标,因为无法使用提供的PID构建QProcess或任何其他类。
但是boost(v1.66)有一个类boost :: process :: child,它可以使用提供的PID构造,甚至可以返回本机句柄(boost :: process :: child :: native_handle_t)。 但从那里我不知道。
它没有任何方法(这并不令人惊讶,因为它似乎是void *的别名),但我找不到任何从这个“类”中提取任何信息的方法。
那么有没有办法从使用boost的给定PID中提取有关二进制文件位置的信息,或者没有?
功能草案:
boost::filesystem::path GetExecutable (boost::process::pid_t pid) {
boost::filesystem::path path_to_executable;
bp::child process (pid);
boost::process::child::native_handle_t handle = process.native_handle();
.
.
.
return path_to_executable;
}
boost::process::child
并不是真正意义上的。 它只会将作为子进程传递的pid视为处理,因此您可以执行诸如加入,查看它是否仍在运行,终止,检查返回值等操作。当然,它将需要正确的访问权限。想做那些操作。
你可以得到一个本机句柄(使用child::native_handle()
),但这只是你在构造它时已经提供的pid,所以你只需要回到child::native_handle()
。
那么简单的答案就是“不”。 你不能使用boost::process::child
来做到这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.