osx - 如何以编程方式删除具有提升权限的文件?

时间:2011-06-07 14:58:37

标签: objective-c macos elevated-privileges

我正在尝试从〜/ Library / PreferencePanes文件夹中删除文件,但这不能通过普通权限完成。通常,如果您需要删除〜/ Library文件夹中的任何文件,系统将询问您的用户名和密码。

我这样做的当前方式是

[[NSFileManager defaultManager] removeItemAtPath:filePath error:&error]

但这会继续返回错误([error localizedDescription]):

theAppName.prefPane couldn’t be removed because you don’t have permission to access it.

为了获得删除文件所需的这些提升权限,我需要使用哪些逻辑和代码?

谢谢!

2 个答案:

答案 0 :(得分:5)

你应该通过Authorization Services Programming Guide。您需要使用AuthorizationExecuteWithPrivileges

答案 1 :(得分:1)

我能找到并且对我有用的唯一方法是在Xcode中创建一个命令行工具。使用SMJOBBLESS将该工具安装为Launchd Job,然后使用XPC连接与之通信。按照下面的EvenBetterAuthorization示例来了解上述所有方法的工作原理。

https://developer.apple.com/library/mac/samplecode/EvenBetterAuthorizationSample/Listings/Read_Me_About_EvenBetterAuthorizationSample_txt.html#//apple_ref/doc/uid/DTS40013768-Read_Me_About_EvenBetterAuthorizationSample_txt-DontLinkElementID_17