如何在NSIS中设置目录权限?

问题描述 投票:35回答:6

我正在尝试使用需要管理员安装的Nullsoft安装系统来构建Windows安装程序。安装程序将创建一个“日志”目录。由于普通用户可以运行此应用程序,因此该目录必须可由普通用户写入。如何指定所有用户都应具有以NSIS脚本语言对该目录进行写访问的权限?

我承认这听起来像是一个坏主意,但是该应用程序只是一个内部应用程序,专用网络上只有少数人使用。我只需要保存日志文件,这样我就可以了解如果发生不良情况,为什么该应用程序损坏了。无法将用户设为管理员。

windows installer permissions nsis
6个回答
34
投票

使用AccessControl插件,然后将其添加到脚本中,“ logs”目录位于安装目录中。

AccessControl::GrantOnFile "$INSTDIR\logs" "(BU)" "FullAccess"

这将为所有用户提供对该文件夹的完全访问权限。


14
投票

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的“用户”。


9
投票

而不是更改程序文件下目录的权限,为什么不将日志放在所有用户可写的位置。

请参见NSIS文档中的4.9.7.7 SetShellVarContext部分。您可以将其与$ APPDATA一起使用,以获取可用于所有用户的应用程序数据文件夹。


6
投票

这是一个老问题,但是正如SörenAPPDATA目录所建议的那样,这是一种执行所需操作的好方法,它是:不要使用用户的个人APPDATA,而是“所有用户” APPDATA目录!这样,任何人都可以访问日志文件;-)

“ ”(而是“所有用户的SID,此值在每个Windows操作系统上都是一个常数)

4
投票
一种方法:调用shell,然后使用caclscacls

2
投票
为什么不在用户的%APPDATA%目录中创建日志目录?您是否真的需要将所有日志放入安装目录?为什么?
© www.soinside.com 2019 - 2024. All rights reserved.