我正在尝试使用需要管理员安装的Nullsoft安装系统来构建Windows安装程序。安装程序生成<!> quot; logs <!> quot;目录。由于普通用户可以运行此应用程序,因此普通用户需要该目录可写。如何指定所有用户都应具有以NSIS脚本语言对该目录具有写访问权限的权限?

我承认这听起来像是一个坏主意,但应用程序只是一个私人网络中只有少数人使用的内部应用程序。我只需要保存日志文件,以便我可以看到如果发生了不好的事情,应用程序会被破坏的原因。用户无法成为管理员。

有帮助吗?

解决方案

使用 AccessControl 插件,然后将其添加到脚本中,其中<!> ; <!>日志QUOT;目录位于安装目录中。

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等同于<!>“用户<!>”;根据 http://support.microsoft.com/default.aspx ?SCID =个kb; EN-US; Q243330

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

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

现在这是一个老问题但正如S <!>#246所建议的那样;任意APPDATA目录是一个很好的方式来做你想要的,事情是: 不要使用用户的个人APPDATA,而是<!>“所有用户<!>”; APPDATA目录! 这样任何人都可以访问日志文件; - )

另外,我在某处读到在GrantOnFile上使用(BU)与某些系统不兼容(如果我记得很好的话,Win 7 x64),也许你应该使用SID <!>“;(S-1-5) -32-545)QUOT <!>;相反(它是所有用户的SID,此值是每个Windows操作系统上的常量)

一种方法:调用shell,然后使用 cacls xcacls

为什么不在用户的%APPDATA%目录中创建一个日志目录?你真的需要把所有日志都放在安装目录中吗?为什么呢?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top