我如何实际使用授权服务?

时间:2010-03-16 04:51:09

标签: c objective-c cocoa macos

我一直在寻找和试验近四个小时,所以我会直接问:

如何正确使用Authorization Services API向用户显示系统级授权窗口,与您在“系统偏好设置”中单击锁定图标时看到的窗口相同?

据我所知,如果您想以编程方式执行此操作,则无法使用Cocoa,如果您的目标是调用通常需要通过sudo调用的可执行文件(在我的case,/usr/bin/pmset)你没有划桨就上了一条小溪。

我挑战你,我恳求你:拜托,赐教。

谢谢。 :)

2 个答案:

答案 0 :(得分:3)

显然你应该做真正的错误处理等等,但这里有一个让你入门的例子。

AuthorizationRef auth = NULL;
OSStatus err;
err = AuthorizationCreate(NULL,
            NULL, 
            kAuthorizationFlagExtendRights|kAuthorizationFlagInteractionAllowed,
            &auth);
if( err != errAuthorizationSuccess ) {
    fprintf(stderr, "oops: %ld\n", (long int)err);
    exit(-1);
}
char *opts[] = { "some", "parameters", "to", "pm", NULL };
err = AuthorizationExecuteWithPrivileges(
    auth,
    "/usr/bin/pmset",
    kAuthorizationFlagDefaults,
    opts,
    NULL);
AuthorizationFree(auth, kAuthorizationFlagDefaults);
if( err != errAuthorizationSuccess ) {
    fprintf(stderr, "oops: %ld\n", (long int)err);
    exit(-1);
}

答案 1 :(得分:2)