sudoでコマンドを実行する必要があるアプリケーションがあります。どのようにパスワードを尋ねることができ、成功すれば、NSTaskを使ってsudoコマンドを実行します。sudo authココアアプリケーションでNSTaskを使ってコマンドを実行中のセッション
3
A
答えて
1
認可サービスLukeを使用してください。 (あなたは「XYZは、継続する管理者パスワードを必要とするアプリケーション」を見てきた場合、これは、それが実装されています方法です。これは、シートの下ない使用sudoを行います。)
3
あなたがしている場合より軽量なソリューションを探しているなら、別の方法があります。
- (BOOL) runProcessAsAdministrator:(NSString*)scriptPath
withArguments:(NSArray *)arguments
output:(NSString **)output
errorDescription:(NSString **)errorDescription {
NSString * allArgs = [arguments componentsJoinedByString:@" "];
NSString * fullScript = [NSString stringWithFormat:@"%@ %@", scriptPath, allArgs];
NSDictionary *errorInfo = [NSDictionary new];
NSString *script = [NSString stringWithFormat:@"do shell script \"%@\" with administrator privileges", fullScript];
NSAppleScript *appleScript = [[NSAppleScript new] initWithSource:script];
NSAppleEventDescriptor * eventResult = [appleScript executeAndReturnError:&errorInfo];
// Check errorInfo
if (! eventResult)
{
// Describe common errors
*errorDescription = nil;
if ([errorInfo valueForKey:NSAppleScriptErrorNumber])
{
NSNumber * errorNumber = (NSNumber *)[errorInfo valueForKey:NSAppleScriptErrorNumber];
if ([errorNumber intValue] == -128)
*errorDescription = @"The administrator password is required to do this.";
}
// Set error message from provided message
if (*errorDescription == nil)
{
if ([errorInfo valueForKey:NSAppleScriptErrorMessage])
*errorDescription = (NSString *)[errorInfo valueForKey:NSAppleScriptErrorMessage];
}
return NO;
}
else
{
// Set output to the AppleScript's output
*output = [eventResult stringValue];
return YES;
}
}
使用例:user950473へ
NSString * output = nil;
NSString * processErrorDescription = nil;
BOOL success = [self runProcessAsAdministrator:@"/usr/bin/id"
withArguments:[NSArray arrayWithObjects:@"-un", nil]
output:&output
errorDescription:&processErrorDescription
asAdministrator:YES];
if (!success) // Process failed to run
{
// ...look at errorDescription
}
else
{
// ...process output
}
Hatの先端私はあなたが望むものを達成する必要があり、この一般的な実装を書きました。
+0
このコードのアプリはApp Storeで使用できますか? – sabes
+0
@sables私は試していないので、私はそれについてコメントできませんでした。 –
関連する問題
- 1. sudoでコマンドを実行
- 2. capistrano sudoを使って内部コマンドを実行する
- 3. NSTask実行スクリプト
- 4. シェルの外でsudoを使ってEmacsコマンドを実行するには?
- 5. ノードJSでsshを使ってsudoコマンドを実行するには?
- 6. Python paramiko sudoを実行中
- 7. ec2インスタンスでsudoコマンドを実行する
- 8. sudoなしでコマンドを実行する
- 9. NPM/Yeomanでsudoコマンドを実行する
- 10. execvp関数を使ってbashのsudoコマンドを実行するには?
- 11. tox sudoのpythonコマンドを実行する
- 12. pythonを使ってsudoコマンドを発行する方法
- 13. sudoで実行中のシェルスクリプトの入手
- 14. bash/shellスクリプトでsudoを使ってサービスを実行
- 15. Javaとsudoのコマンドの実行
- 16. NSTaskでopenコマンドを使用する
- 17. PHPでexec()を使用してRSHコマンドを実行中
- 18. 実行するコマンドはsudoログイン
- 19. pysftpモジュールを使用してsudo特権でコマンドを実行する方法
- 20. sudoを使って別の端末でコマンドを実行するにはどうすればいいですか?
- 21. Applescriptココアアプリケーションの中に
- 22. Ansibleのプレイブックでsudoコマンドを実行できません
- 23. rootのパスワードやsudoを使わずにrootとしてコマンドを実行
- 24. NSTaskでターミナルコマンドを実行する
- 25. JavaでOS Xのsudoコマンドを実行するには
- 26. wildflyで特定のsudoコマンドを実行する
- 27. "現在のディレクトリを取得中にエラーが発生しました" sudoの下でpsqlコマンドを実行中
- 28. プロセスが実行中かどうかを確認するNSTask
- 29. PHPスクリプトから "sudo"コマンドを実行していますか?
- 30. javaで特権を持つsudo suコマンドを実行する
[NSTask-objective-cを使用して許可を与える方法](http://stackoverflow.com/questions/3541654/how-to-give-permission-using-nstask-objective-c) –
これはですその質問の重複ではありません。この質問は*実際にはsudo *を使用しています(正解は "代わりに認可サービスを使用する"ことに同意します)。 –