您的位置:首页 > 其它

MFC获取程序安装目录

2014-03-09 09:01 447 查看
描述:
对office做插件 使用DLL注入方式

目的:
获取DLL文件的真实路径

使用方法:
GetCurrentDirectory()
GetModuleFileName()

区别:
GetCurrentDirectory()获取的是程序安装的目录 如:c:\windows
GetModuleFileName()获取的是安装目录并文件名 如:c:\windows\aa.exe

问题:
安装程序将DLL安装在D:\ office安装在C:\ 使用GetCurrentDirectory()正常应该可以获取到该DLL
使用该函数获得的是C盘office安装目录。并不是DLL的真实目录。

解决方法:
使用GetModuleFileName()来获取DLL实际安装目录
具体如下:
//获得DLL当前路径
TCHAR fullPath[MAX_PATH];
CString strAppPath; // 保存结果
TCHAR drive[_MAX_DRIVE]; // 盘符名称,比如说C盘啊,D盘啊
TCHAR dir[_MAX_DIR]; // 目录
TCHAR fname[_MAX_FNAME]; // 进程名字
TCHAR ext[_MAX_EXT]; //后缀,一般为exe或者是dll
HINSTANCE hrs = AfxGetResourceHandle(); // 获得当前资源句柄(一般是exe的资源句柄)
AfxSetResourceHandle(theApp.m_hInstance); // 设置为dll的资源句柄
HINSTANCE h_CurDll = AfxGetResourceHandle(); //取得dll的句柄
AfxSetResourceHandle(hrs); // 调用结束后,重新设置为exe的资源句柄
GetModuleFileName(h_CurDll, fullPath, MAX_PATH);
_splitpath(fullPath, drive, dir, fname, ext); //分割该路径,得到盘符,目录,文件名,后缀名
strAppPath = drive;
strAppPath += dir;

strAppPath则为文件安装的目录

注意:
使用GetModuleFileName()第一个参数为Null时也会获取到的是office安装目录。第一个参数要为DLL资源句柄。 ps:文中使用目录因为使用linux的习惯叫法(文件夹)
本文出自 “None” 博客,请务必保留此出处http://evely.blog.51cto.com/1089422/1370938
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: