Cocoa shell命令权限

Cocoa shell命令权限,cocoa,shell,command,permissions,Cocoa,Shell,Command,Permissions,我正在开发我的第一个Mac应用程序,但在shell命令方面有一些问题。。。 我试图找出如何获得用户可以输入其密码的权限窗口。我想在系统文件夹中复制一张图片,并更改另一张图片的名称。我尝试更改登录窗口的背景 命令1:“sudo mv DefaultDesktop.jpg DefaultDesktop_copy.jpg” 命令2:“sudo cp/path/of/image.jpg DefaultDesktop.jpg” 有了终端,就很容易了。但是有了一个界面,我想要这个提示询问密码 以下是第一个命

我正在开发我的第一个Mac应用程序,但在shell命令方面有一些问题。。。 我试图找出如何获得用户可以输入其密码的权限窗口。我想在系统文件夹中复制一张图片,并更改另一张图片的名称。我尝试更改登录窗口的背景

命令1:“sudo mv DefaultDesktop.jpg DefaultDesktop_copy.jpg”
命令2:“sudo cp/path/of/image.jpg DefaultDesktop.jpg”

有了终端,就很容易了。但是有了一个界面,我想要这个提示询问密码

以下是第一个命令的代码:

- (void)copyDefaultBackground:(id)sender {
    NSTask *task;
    task = [[NSTask alloc] init];
    [task setLaunchPath: @"/usr/bin/sudo"];

    NSArray *arguments;
    arguments = [NSArray arrayWithObjects:@"mv"
                            @"/System/Library/CoreServices/DefaultDesktop.jpg",
                            @"/System/Library/CoreServices/DefaultDesktop_copy.jpg", 
                            nil];
    [task setArguments: arguments];

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

    NSFileHandle *file;
    file = [pipe fileHandleForReading];

    [task launch];

    NSData *data;
    data = [file readDataToEndOfFile];

    NSString *string;
    string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSLog (@"Script returned:\n%@", string);
}
更新: 我发现NSFileManager是一个允许管理磁盘上文件的对象。这难道不比在shell命令中使用NSTask更好吗


谢谢。

您需要使用授权服务来授权移动:

对于文件移动本身,为什么不使用NSFileManager?除了授权之外,您的两个步骤(进行备份,然后将新文件移动到位)都可以通过NSFileManager使用一行代码完成。

您需要的是,这是一个类似NSTask的类,用于抽象授权服务


摆脱sudo并使用STPrivilegedTask执行命令——系统将提示用户输入管理员密码,您的命令将以管理员权限执行。

但如果您要执行两个命令,则每次都必须输入密码:(