我正在尝试使用NSTask运行以下命令:
$sudo launchctl load /Users/admin/Library/LaunchAgents/com.devdaily.crontabtest.plist
以下是我使用的代码:
NSTask *server = [NSTask new];
[server setLaunchPath:@"/bin/launchctl"];
[server setArguments:[NSArray arrayWithObjects:@"load",@"com.devdaily.crontabtest.plist",nil]];
[server setCurrentDirectoryPath:@"/Users/admin/Library/LaunchAgents/"];
NSPipe *outputPipe = [NSPipe pipe];
[server setStandardInput:[NSPipe pipe]];
[server setStandardOutput:outputPipe];
[server launch];
[server waitUntilExit]; // Alternatively, make it asynchronous.
[server release];
但是,由于sudo
命令,它不起作用。我该如何解决这个问题?
答案 0 :(得分:1)
不幸的是,你不能。因为无法输入密码。
但是,您仍然可以使用NSAppleScript
代替NSTask
来运行bash命令:
写一个类似的文章:
do shell script
[your command]
with administrator privileges
系统会要求您输入管理员密码。
示例:强>
NSDictionary *error = [NSDictionary new];
NSString *script = @"do shell script \"launchctl load /Users/admin/Library/LaunchAgents/com.devdaily.crontabtest.plist\" with administrator privileges";
NSAppleScript *appleScript = [[NSAppleScript new] initWithSource:script];
if ([appleScript executeAndReturnError:&error]) {
NSLog(@"success!");
} else {
NSLog(@"failure!");
}
答案 1 :(得分:0)
阅读Apple的Secure Coding Guide并按照Elevating Privileges Safely的建议。
换句话说,不要使用sudo
或类似的东西。使用SMJobBless()
安装并启用启动代理。另请参阅SMJobBless sample project。