【问题标题】:How do you set directory permissions in NSIS?你如何在 NSIS 中设置目录权限?
【发布时间】:2010-09-12 03:01:15
【问题描述】:

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

我承认这听起来有点像一个坏主意,但该应用程序只是一个内部应用程序,只有少数人在专用网络上使用。我只需要保存日志文件,这样我就可以看到如果发生不好的事情,应用程序为什么会损坏。用户不能成为管理员。

【问题讨论】:

    标签: windows installation permissions nsis


    【解决方案1】:

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

    AccessControl::GrantOnFile "<folder>" "(S-1-5-32-545)" "FullAccess"

    根据Microsoft Support: Well-known security identifiers in Windows operating systems,S-1-5-32-545 相当于“用户”。

    【讨论】:

    • 您的链接已损坏
    【解决方案2】:

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

    另外,我在某处读到,在 GrantOnFile 上使用 (BU) 不适用于某些系统(如果我没记错的话,Win 7 x64),也许你应该使用 SID "(S-1-5-32-545 )" 代替(它是所有用户的 SID,这个值在每个 Windows 操作系统上都是一个常量)

    【讨论】:

      【解决方案3】:

      与其更改 Program Files 下目录的权限,不如将日志放在所有用户均可写入的位置。

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

      【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        • 我希望其他用户也能够查看日志。如果它们在用户 APPDATA 目录中,那么如果用户 1 运行应用程序,则只有用户 1 或管理员可以看到日志文件。
        【解决方案6】:

        一种方法:调用shell,并使用caclsxcacls

        【讨论】:

          猜你喜欢
          • 2019-05-11
          • 2014-05-28
          • 1970-01-01
          • 2019-10-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-02-11
          相关资源
          最近更新 更多