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
对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
相关文章推荐
- mfc 程序安装目录
- MFC 获取当前程序运行目录
- .Net Windows服务程序中获取安装程序所在目录
- MFC获取程序目录路径方法
- .Net Windows服务程序中获取安装程序所在目录
- .Net Windows服务程序中获取安装程序所在目录
- Inno Setup中做补丁通过注册表获取原程序安装目录
- 【转】MFC获取程序目录路径方法
- MFC获取程序目录路径方法
- .Net Windows服务程序中获取安装程序所在目录
- MFC获取程序运行目录
- C++ MFC 获取程序根目录方法
- 程序中执行shell命令行,获取system目录读写权限
- 改变默认程序安装目录
- 让MFC程序在没有安装VS2008的电脑中运行
- C++编译过程中"没有找到MFC80UD.DLL,因此这个程序未能启动.重新安装应用程序可能会修复此问题"? 的彻底解决
- 今天刚安装了linux redhat6.4 在打开的Firefox的时候报错:无法初始化应用程序安全组件。很有可能您的程序个人目录中的文件出现问题。请检查
- 使用vb.net获取程序的相对路径及其根目录
- VB获取程序部署目录
- MFC中获取程序运行的路径