我正在尝试使用需要管理员安装的Nullsoft安装系统来构建Windows安装程序.安装程序创建一个"logs"目录.由于普通用户可以运行此应用程序,因此普通用户需要该目录可写.如何指定所有用户都应具有以NSIS脚本语言对该目录具有写访问权限的权限?
我承认这听起来像是一个坏主意,但应用程序只是一个内部应用程序,只有少数人在专用网络上使用.我只需要保存日志文件,以便我可以看到如果发生了不好的事情,应用程序会被破坏的原因.用户无法成为管理员.
使用AccessControl插件,然后将其添加到脚本中,其中"logs"目录位于安装目录中.
AccessControl::GrantOnFile "$INSTDIR\logs" "(BU)" "FullAccess"
这样就可以完全访问所有用户的文件夹.
AccessControl::GrantOnFile "
在Windows Server 2008计算机上对我不起作用.相反,我不得不使用这个:
AccessControl::GrantOnFile "
根据http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q243330,S-1-5-32-545等同于"用户"
为什么不将日志放在所有用户都可写的位置,而不是更改Program Files下目录的权限.
请参阅NSIS文档中的4.9.7.7 SetShellVarContext部分.您可以将它与$ APPDATA一起使用,以获取可供所有用户编写的应用程序数据文件夹.
现在这是一个老问题,但正如SörenAPPDATA目录所建议的那样,做一个你想要的好方法,就是:不要拿用户的个人APPDATA而是"所有用户"APPDATA目录!这样任何人都可以访问日志文件;-)
另外,我在某处读到在GrantOnFile上使用(BU)与某些系统不兼容(如果我记得很好的话,Win 7 x64),也许你应该使用SID"(S-1-5-32-545)"代替(这是所有用户的SID,此值是每个Windows操作系统上的常量)