我正在尝试使用需要管理员安装的Nullsoft安装系统来构建Windows安装程序。安装程序将创建一个“日志”目录。由于普通用户可以运行此应用程序,因此该目录必须可由普通用户写入。如何指定所有用户都应具有以NSIS脚本语言对该目录进行写访问的权限?
我承认这听起来像是一个坏主意,但是该应用程序只是一个内部应用程序,专用网络上只有少数人使用。我只需要保存日志文件,这样我就可以了解如果发生不良情况,为什么该应用程序损坏了。无法将用户设为管理员。
使用AccessControl插件,然后将其添加到脚本中,“ logs”目录位于安装目录中。
AccessControl::GrantOnFile "$INSTDIR\logs" "(BU)" "FullAccess"
这将为所有用户提供对该文件夹的完全访问权限。
AccessControl::GrantOnFile "<folder>" "(BU)" "FullAccess"
在Windows Server 2008计算机上不适合我。相反,我不得不使用这个:
AccessControl::GrantOnFile "<folder>" "(S-1-5-32-545)" "FullAccess"
S-1-5-32-545等同于根据Microsoft Support: Well-known security identifiers in Windows operating systems的“用户”。
而不是更改程序文件下目录的权限,为什么不将日志放在所有用户可写的位置。
请参见NSIS文档中的4.9.7.7 SetShellVarContext部分。您可以将其与$ APPDATA一起使用,以获取可用于所有用户的应用程序数据文件夹。
这是一个老问题,但是正如SörenAPPDATA目录所建议的那样,这是一种执行所需操作的好方法,它是:不要使用用户的个人APPDATA,而是“所有用户” APPDATA目录!这样,任何人都可以访问日志文件;-)
“ ”(而是“所有用户的SID,此值在每个Windows操作系统上都是一个常数)cacls
或cacls
。