为什么放弃默认选择Program Files 我一直百思不得其解.
都是UAC(用户权限控制)惹得祸
自从VISTA引入了权限机制UAC后,windows7及以后的系统版本,对于Program Files,应用程序是没有写入权限的,虽然安装时候会提权安装,但是后面的软件操作(写入文件,修改配置)会比较困难.
列举如下:
- 修改用户的配置 (
ini文件
) 或者 其他文本类 (xml等等
) - 软件的升级 (
假如仅升级一个动态链接库dll,而不重新安装程序
) - 其他对安装目录下文件的写操作 (
临时数据文件等
)
APPDATA的权限
%USERPROFILE%\AppData
系统变量直接会指到用户的文件,我们可以在资源管理器地址栏直接输入这个变量名,打开C:\Users\usename\AppData
系统设置这个文件也是为了方便权限管理,这个账户的程序不会被其他用户使用。 登陆的用户对此文件夹具有所有权限。用户数据的几个子文件夹不同; 所以我们也有必要使用这个文件夹来存放软件的数据文件或者安装目录. 软件放进AppData中,好处是可以静默升级,随意修改文件,不用老是收到系统的警告没有权限的提示。
VC++对此文件夹的获取
void CMyView::getAppPath(CString &Apppath)
{
GetEnvironmentVariable(_T("APPDATA"), Apppath.GetBuffer(MAX_PATH + 1), MAX_PATH);
Apppath.ReleaseBuffer();
}
打包软件NSIS对此文件夹的获取
SetOutPath "$APPDATA\myapp"
SetOverwrite ifnewer
File "myapp.exe"
File "*.ini"
File "*.db"
File "*.dat"