码迷,mamicode.com
首页 > Windows程序 > 详细

GetModuleFileNameEx遍历获取64bit程序路径失败的一种解决方法(Win7-64-bit)

时间:2015-05-03 13:25:09      阅读:323      评论:0      收藏:0      [点我收藏+]

标签:

问题:

32位程序在64位系统上调用GetModuleFileNameEx()遍历获取64位进程的全路径失败,得到的路径都为空。


根据官方的说法:

For the best results use the following table to convert paths.

Windows 2000 = GetModuleFileNameEx()
Windows XP x32 = GetProcessImageFileName()
Windows XP x64 = GetProcessImageFileName()
Windows Vista = QueryFullProcessImageName()
Windows 7 = QueryFullProcessImageName()

Note: If you are not aware the API GetProcessImageFileName() returns a kernel DOS device path. You can use the following API to map the device paths to a Win32 format.

但要注意的是GetModuleFileName在64bit下获取到的是不正确的,用32去填充64结果是空。

本人在32bit的win7下可以准确获取,64bit的win7下得不到自己要的东西。如下图所示:

技术分享


推荐用vista新增的:QueryFullProcessImageName(),结果入下图:
技术分享


另外搜遍了网络也没搜到该函数的样例,再懒也只好自己写了~~

DWORD size = MAX_PATH;
char sExeName[MAX_PATH] = {0};
QueryFullProcessImageName(hProcess, 0, sExeName, &size);
当然用GetProcessImageFileName获取更好,只是代码有点长,懒的写了。


GetModuleFileNameEx遍历获取64bit程序路径失败的一种解决方法(Win7-64-bit)

标签:

原文地址:http://blog.csdn.net/jiangqin115/article/details/45457985

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!