2011-06-07 77 views
4

我试图从〜/ Library/PreferencePanes文件夹中删除一个文件,而这不能用普通权限来完成。通常,如果您需要从〜/ Library文件夹中删除任何文件,系统会询问您的用户名和密码。osx - 如何以编程方式删除具有提升特权的文件?

目前的办法,我这样做是

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

但这种不断返回错误([error localizedDescription]):

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

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

谢谢!

+0

其实我的答案是不正确的在这里使用。 – 2011-06-07 16:03:24

+0

嗯......似乎没问题。我一直在寻找关于这个特权的最后几个小时,而且我也看到了类似的答案。有没有更简单的方法来做到这一点,而不是使用授权服务? – Andrei 2011-06-07 16:07:36

回答

5

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

+0

任何想法该工具应该是什么?那必须是我创建的应用程序吗? – Andrei 2011-06-07 15:57:52

+0

似乎没有办法在提升的权限下使用NSFileManager。您可能需要创建一个脚本,并使用'AuthorizationExecuteWithPrivileges'提升特权。 – 2011-06-07 16:18:23

+3

是的,谢谢。在上面发布的“Here”链接之后,我设法创建了自己的代码,该代码使用'rm'工具删除文件,同时提升了特权。我在这里发布代码:http://stackoverflow.com/questions/3588779/obtaining-admin-privileges-to-delete-files-using-rm-from-a-cocoa-app/6269915#6269915 – Andrei 2011-06-07 18:32:00

1

我能找到的唯一方法是为Xcode创建一个命令行工具。使用SMJOBBLESS将该工具作为启动作业安装,然后使用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