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

问题:

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获取更好,只是代码有点长,懒的写了。

时间: 2024-10-31 06:09:45

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

mysql远程连接失败的两种解决方法

---恢复内容开始--- (这是转载别人的,因为我觉得很有用,每次都是参考这个的第二种方法解决的,不管你听不听得到,先说声谢谢!也记下来方便大家看看) mysql解决远程不能访问的二种方法,需要的朋友可以参考一下: 1.在/etc/mysql/my.cnf中的[mysqld]段注释掉bind-address = 127.0.0.12.用mysql -uroot -p 登陆mysql,然后采用以下方法开启远程访问权限: 方法1:mysql>use mysql; mysql>update user

获取当前程序路径

1. 本来想用java中的方式的,网上查到一些信息,我的测试代码如下: 1 String str = System.getProperty("java.class.path"); 2 String strUsrDir = System.getProperty("usr.dir"); 3 URL url = this.getClass().getResource(""); // **Test1.class 即 Class.forName("

WPF获取应用程序路径方法,获取程序运行路径方法

试了好多种方法,在WPF中获取工程的路径都没能解决掉,暂时用的绝对路径"D://WPF.....",但是发布的时候出现问题了,放到别的电脑上找不到路径,又开始了地毯式搜索,终于解决了,跟遇到此类问题的朋友分享下解决办法,如下: AppDomain.CurrentDomain.BaseDirectory +文件名即可,简单吧? //获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称. string str5=Application.StartupPath; //可获得当前执行的

【C#遗补】获取应用程序路径之System.IO.Directory.GetCurrentDirectory和System.Windows.Forms.Application.StartupPath的区别

原文:[C#遗补]获取应用程序路径之System.IO.Directory.GetCurrentDirectory和System.Windows.Forms.Application.StartupPath的区别 .Net Framework中,System.IO.Directory.GetCurrentDirectory()方法用于获得应用程序当前工作目录 如果使用此方法获得应用程序所在的目录,应该注意:System.IO.Directory.GetCurrentDirectory()方法获得的

asp.net Core 获取应用程序所在目录的2种方式

//获取应用程序所在目录的2种方式(绝对,不受工作目录影响,建议采用此方法获取路径).如:d:\Users\xk\Desktop\WebApplication1\WebApplication1\bin\Debug\netcoreapp2.0 String basePath1 = AppContext.BaseDirectory; String basePath2 =Path.GetDirectoryName(typeof(Program).Assembly.Location); //注意:对于

springMVC 获取本地项目路径 以及上传文件的方法整理

String path=request.getSession().getServletContext().getRealPath("upload/img/product"); //二进制上传 MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; //获取文件 CommonsMultipartFile fpic=(CommonsMultipartFile) multipa

Linux下使用Python连接Oracle 报cx_Oracle.DatabaseError: DPI-1047: 64-bit Oracle Client library cannot be loaded解决方法

在Linux上使用python运行数据库脚本的时候报:cx_Oracle.DatabaseError: DPI-1047: 64-bit Oracle Client library cannot be loaded解决方法 这个导致这个问题的原因是本机的Python2.7是64位的,而数据库用了32位的instantclient-basic,所以要把instantclient-basic的版本更新为64位的 以下是按照官网文档操作的,自测没有问题. 下载instantclient-basic的R

Win10 IoT C#开发 2 - 创建基于XAML的UI程序 及 应用的三种部署方法

原文:Win10 IoT C#开发 2 - 创建基于XAML的UI程序 及 应用的三种部署方法 Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,与以往的Windows版本不同,是为物联网设备专门设计的,硬件也不仅仅限于x86架构,同时可以在ARM架构上运行. 上一章我们讲了Raspberry安装Win10 IoT系统及搭建Visual Studio 2015开发环境的方法(http://www.cnblogs.com/cloudtech/p/5562120.html)

安卓(android)建立项目时失败,出现Android Manifest.xml file missing几种解决方法?(总结中)

安卓(android)建立项目时失败.出现AndroidManifest.xml file missing几种解决方法?(总结中) Eclipse新建项目.遇到这种问题.注意例如以下: 1.文件名称最好不要用中文. 2.文件夹也不要用中文. 3.这个不会出错,但出于程序编写习惯.第一个字母最好为大写.