java放在c盘x86_你开发的软件安装在C盘Program Files (x86)下产生的异常

## 没有躲过的坑--你开发的软件安装在C盘Program Files (x86)下产生的异常

今天偶然发现的问题,就是自己写的win32程序安装在C盘Program Files (x86)文件夹下就会产生异常,而安装在其他文件夹,即使是D盘的Program Files (x86)下,程序也可以完美运行。

引起这个,肯定是权限的问题。这个软件运行时,需要读写数据库,以及各种缓存数据。

这就是我给自己挖的一个坑儿,相信很多人也会遇到这个问题。

就是在开发程序、VS调试的时候,总喜欢使用当前路径,或者是相对路径。即把一些数据与.exe文件放在一起。

但是安装的时候,选择的是C盘Program Files (x86)文件夹,那么就意味着数据库、以及各种缓存数据的读写也都在文件夹Program Files (x86)中进行,这样有时候就会产生权限的问题。

静下来,沉思一下。看了看QQ,就算是把QQ安装在Program Files (x86)文件夹下,你会发现,在“文档”(XP是“我的文档”)下面会产生一个Tencent Files文件夹,用于存放各种数据。

我们知道,读写“文档”下的内容是不需要权限的。

这就指导我们在存在数据库等缓存文件时,最好放在“文档”下面。

接下的问题就是程序中如何获得“文档”文件夹呢?

使用函数**SHGetFolderPath**:

~~~

std::wstring GetDocumentsPath() {

TCHAR my_documents[MAX_PATH];

HRESULT result = SHGetFolderPath(NULL, CSIDL_PERSONAL, NULL, SHGFP_TYPE_CURRENT, my_documents);

return std::wstring(my_documents);

}

~~~

HRESULT SHGetFolderPath(

HWND hwndOwner,

int nFolder,

HANDLE hToken,

DWORD dwFlags,

LPTSTR pszPath

);

以上为函数原型,其中nFolder指定要获取的目录(具体参考MSDN说明)

CSIDL_BITBUCKET 回收站

CSIDL_CONTROLS 控制面板

CSIDL_DESKTOP Windows 桌面Desktop

CSIDL_DESKTOPDIRECTORY Desktop的目录

CSIDL_DRIVES 我的电脑

CSIDL_FONTS 字体目录

CSIDL_NETHOOD 网上邻居

CSIDL_NETWORK 网上邻居虚拟目录

**CSIDL_PERSONAL 我的文档**

CSIDL_PRINTERS 打印机

CSIDL_PROGRAMS 程序组

CSIDL_RECENT 最近打开的文档

CSIDL_SENDTO “发送到”菜单项

CSIDL_STARTMENU 任务条启动菜单项

CSIDL_STARTUP 启动目录

CSIDL_TEMPLATES 文档模板

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值