软安装程序,如何使ProgramData子文件夹可写



ProgramData文件夹是存储所有用户共享的应用程序可写文件的最佳位置。但是当Nsis安装程序以admin权限运行时(这需要写入Program Files),那么在ProgramData文件夹中创建的文件夹和文件对除admin以外的所有用户都是只读的。如何改变这一点,并在ProgramData文件夹内的所有用户可写的文件?

我不知道这个行为是一个功能还是一个bug,但我已经找到了一个解决方案。需要AccessControl插件(下载并复制Nsis插件文件夹)。在Nsis脚本的"install"部分放入如下内容:

; This is important to have $APPDATA variable
; point to ProgramData folder
; instead of current user's Roaming folder
SetShellVarContext all
; This sets us permissions
AccessControl::GrantOnFile "$APPDATAFolder" "(S-1-5-32-545)" "FullAccess"
AccessControl::GrantOnFile "$APPDATAFolder*" "(S-1-5-32-545)" "FullAccess"

S-1-5-32-545相当于所有用户,所以这段代码将授予所有用户对指定文件夹和其中所有文件的完全访问权限。

或通过命令行设置(仅限Win7):ExecWait 'Icacls "$APPDATAFolder"/grant Users:(OI)(CI)M'

最新更新