我正在开发一个应用程序,它可以为所有用户存储一些全局偏好设置。它通过将
在 OS X 版本 10.7(Lion)之前,这个方法很有效。然而,在 Lion 上运行此代码时,即使从管理员帐户运行该应用程序,调用也会失败。
注意,只有具备管理员权限才能保存“任何用户”的首选项。
我从搜索中了解到,在 Snow Leopard 和 Lion 之间所需的特权已更改(从管理员更改为根)。似乎我可以继续使用类似的代码,遵循 Apple 的 SMJobBless 示例代码,安装一个执行特权操作的辅助工具。
...以安全地安装执行特权操作的辅助工具...
但是,我注意到
此域目前不受支持。
使用一个辅助工具是否是创建所有用户首选项的正确方法?还是我应该使用其他支持的方法?
kCFPreferencesAnyUser
作为 CFPreferencesSetValue
的 userName
参数来实现。在 OS X 版本 10.7(Lion)之前,这个方法很有效。然而,在 Lion 上运行此代码时,即使从管理员帐户运行该应用程序,调用也会失败。
CFPreferencesSetValue
的文档说明如下:注意,只有具备管理员权限才能保存“任何用户”的首选项。
我从搜索中了解到,在 Snow Leopard 和 Lion 之间所需的特权已更改(从管理员更改为根)。似乎我可以继续使用类似的代码,遵循 Apple 的 SMJobBless 示例代码,安装一个执行特权操作的辅助工具。
...以安全地安装执行特权操作的辅助工具...
但是,我注意到
kCFPreferencesAnyUser
的文档本身声明:此域目前不受支持。
使用一个辅助工具是否是创建所有用户首选项的正确方法?还是我应该使用其他支持的方法?
CFPreferencesSynchronize
的调用返回 false,表示发生了错误。 - RichkCFPreferencesAnyUser
域,需要使用kCFPreferencesCurrentHost
,这曾经让我困扰了一段时间(在此页面的底部有注释:https://developer.apple.com/library/mac/documentation/CoreFoundation/Reference/CFPreferencesUtils/Reference/reference.html#//apple_ref/doc/uid/20001450-CH1g-130209) - Matthemattics