4

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コマンドが原因で動作しません。どうすればこれを修正できますか?

4

2 に答える 2

1

残念ながら、できません。パスワードを入力する方法がないためです。

NSAppleScriptただし、代わりに を使用して bash コマンドを実行することもできますNSTask:

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!"); 
}
于 2013-03-24T11:30:10.193 に答える
0

Apple のSecure Coding Guideを読み、 Elevating Privileges Safelyの推奨に従ってください。

つまり、使用しないsudoでください。SMJobBless()起動エージェントをインストールして有効にするために使用します。SMJobBless サンプル プロジェクトも参照してください。

于 2013-03-24T11:59:11.950 に答える