从objective-c运行sudo命令

从objective-c运行sudo命令,objective-c,Objective C,如何从objective-c运行sudo命令?我能够使用以下方法运行不需要sudo的简单命令: NSTask *task; task = [[NSTask alloc] init]; [task setLaunchPath: @"/bin/sh"]; NSArray *arguments = [NSArray arrayWithObjects:@"-c" ,[NSString stringWithFormat:@"%@", cmd], nil]; NSLog(@"run command:

如何从objective-c运行sudo命令?我能够使用以下方法运行不需要sudo的简单命令:

NSTask *task;
task = [[NSTask alloc] init];
[task setLaunchPath: @"/bin/sh"];

NSArray *arguments = [NSArray arrayWithObjects:@"-c" ,[NSString stringWithFormat:@"%@", cmd], nil];


NSLog(@"run command: %@",cmd);
[task setArguments: arguments];

NSPipe *pipe;
pipe = [NSPipe pipe];
[task setStandardOutput: pipe];

NSFileHandle *file;
file = [pipe fileHandleForReading];

[task launch];

NSData *data;
data = [file readDataToEndOfFile];

NSString *output;
output = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
return output;
当我运行sudo命令时,我得到一个错误:操作不允许

根据我在网上找到的信息,我需要获得授权。我阅读了苹果公司的授权文件,但没有具体说明

来自苹果的EvenBetterAuthorization示例不起作用

应用程序是用Apple ID签名的。

您应该学习,但如果您想使用
sudo
完成此操作,您可以

sudo
需要的是一个密码来授权执行,它通常从终端获取此密码-即与标准输入不相同,尽管在命令外壳中,默认情况下标准输入也连接到终端。
sudo
-S
选项指示它从标准输入读取密码

按照现有设计,您可以:

1) 将
-S
添加到
sudo
命令中

2)
sudo
会将密码提示和任何错误消息(如无效密码)写入标准错误。创建一个管道并将其附加到任务
standardError
,或将现有管道同时附加到
standardOutput
standardError
,以捕获此输出

3) 创建另一个管道并将其附加到任务
standardInput
。将密码后跟换行符写入该管道。当任务运行时,
sudo
将读取密码并执行您的命令。当然,如果命令本身需要也将从管道读取的输入,那么您必须将其写入管道


HTH

您需要获得授权的可能重复的“是”。这是你的问题吗?你是想以root用户身份运行命令,还是想通过
sudo
命令来使用它?如果你想通过
sudo
你需要拥有
/etc/sudoers
中拥有进程的用户的权限。我想执行命令:“sudo discoveryutil udnsflushcaches”来清理DNS缓存。是的,我需要获得授权。但我如何使用授权来执行该命令。该指南以:“重要提示:应用程序沙箱中不支持授权服务API,因为它允许权限提升。”我的应用程序是一个沙盒。如果你在沙盒中,你就不走运了-尝试调用
sudo
应该会失败,因为你调用的任何其他应用程序都会继承你的应用程序沙盒限制。你或者不需要对你的应用程序进行沙箱处理,或者找到一种非特权的方式来实现你的目标。非常感谢你的回复。