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

时间:2020-03-06 14:33:30  来源:igfitidea点击:

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

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

解决方案

一种方法:调用外壳,然后使用cacls或者xcacls

为什么不在用户的%APPDATA%目录中创建日志目录?我们是否真的需要将所有日志放在安装目录中?为什么?

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

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

这样,所有用户都可以完全访问该文件夹。

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

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

在Windows Server 2008计算机上,AccessControl :: GrantOnFile" <文件夹>""(BU)"" FullAccess"对我不起作用。相反,我不得不使用这个:

`AccessControl :: GrantOnFile" <文件夹>""((S-1-5-32-545)""完全访问"

根据http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q243330,S-1-5-32-545等效于"用户"