NSFileManager 在没有管理员权限的情况下无法工作

Posted

技术标签:

【中文标题】NSFileManager 在没有管理员权限的情况下无法工作【英文标题】:NSFileManager doesn't work without admin privileges 【发布时间】:2017-01-26 23:58:36 【问题描述】:

我正在开发一个 macOS 应用程序(在 Mac App Store 之外分发),我从 Internet 下载一些文件,在 localDomainMask 下的 applicationSupportDirectory 中创建一些文件夹,并将这些文件写入创建的文件夹,使用 NSFileManager 类。

该应用在管理员用户帐户中运行时运行良好,但当该帐户没有管理员权限时(例如,如果我将其用作来宾用户)则不能。

如何让应用请求管理员权限,以便 NSFileManager 不会引发与权限相关的错误?

【问题讨论】:

你处理这个错误。以任何用户身份运行的应用程序可以写入该用户的应用程序支持目录(应用程序应在其中创建自己的子目录)。如果您的应用程序由于权限错误而失败,那么它正在写入不应该写入的地方。准确检查您的应用正在写入的位置、文件夹的权限等。如果需要,请在新创建的用户帐户中进行测试。如果您找不到问题,请编辑您的问题以显示确切的路径、权限等,有人可能会帮助您解决问题。 您好,感谢您的评论。我已经检查过了,实际上只有在localDomainMask 下写入时,当用户不是管理员时它才会失败(我已经更新了第一段)。实际上,如果用户不是管理员,它不应该写在那里,所以我的问题仍然存在:我怎样才能让应用程序要求管理员权限,以便 NSFileManager 不会引发与权限相关的错误? 你使用localDomainMask而不是userDomainMask有什么原因吗?后者是当前用户的应用程序支持(或沙盒位置),您应该始终拥有其中任何一个的写入权限; IIRC local 是 /Library 中的那个。 这是一个非常好的问题,在确认即使没有管理员权限也可以写信给userDomainMask 后,我已经与我的团队分享了这个问题。 【参考方案1】:

如果你真的需要这样做,那么你需要提升你的应用程序的权限,或者更好的应用程序的助手,以便执行操作。有很多方法可以实现这一点;显然,这样做不仅适用于任何应用程序,否则将没有安全性。

Apple 的Authorization Services Programming Guide 是一个不错的起点。

HTH

【讨论】:

谢谢。这是我在提出问题后发现的,我打算在星期一看看。我还不完全理解辅助工具的概念,或者为什么我需要一个在我的上下文中,但也许我会。

以上是关于NSFileManager 在没有管理员权限的情况下无法工作的主要内容,如果未能解决你的问题,请参考以下文章

自定义 iOS 键盘在没有完全访问权限的情况下访问容器

使用nsfilemanager设置文件夹的权限[重复]

NSFileManager removeItemAtPath:error: 不尊重 POSIX 权限

python -- 在没有管理员权限的情况下手动安装下载的模块

WCF 服务在没有管理员权限的情况下无法运行

在没有管理员权限的情况下启动 IIS Express