Cocoa shell命令权限

标签 cocoa shell command permissions

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

Command 1: "sudo mv DefaultDesktop.jpg DefaultDesktop_copy.jpg"
Command 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 更好吗?

谢谢。

最佳答案

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

Introduction to Authorization Services Programming Guide

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

关于Cocoa shell命令权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1719196/

相关文章:

c++ - 如何通过命令提示符启动 exe 并从命令提示符窗口获取文本

objective-c - 如何检查文件是否在 Cocoa 中被锁定?

linux - 有没有更好的方法来模拟标准输入?

shell - 如何使用awk计算偏差方程

windows - 如何在 Windows 命令提示符中执行 "word count"命令

text - 以编程方式在 C# 中打开文本文件

cocoa - NSView 框架通过 -setFrame : following autoresizing 以外的方式设置

objective-c - 如何使用 Objective-C 将 mp3 歌曲导入 iTunes?

objective-c - NSTextField/NSTextFieldCel 上文本内的阴影

Linux:如何在别名中添加 $ 符号?