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