zoukankan      html  css  js  c++  java
  • Objective-C MacOS以管理员权限执行程序

    在MacOS下非常多操作是须要管理员权限的, 比方我们执行chmod。在命令行下能够使用sudo chmod来申请以管理员权限执行。可是使用XCode写的程序是不能使用sudo的。

    须要自己写代码来申请权限。以下是一个样例。 以管理员身份执行chmod 777

    bool ChmodFileWithElevatedPrivilegesFromLocation(NSString *location)
    {
        // Create authorization reference
        OSStatus status;
        AuthorizationRef authorizationRef;
    
        status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, kAuthorizationFlagDefaults, &authorizationRef);
        if (status != errAuthorizationSuccess)
        {
            NSLog(@"Error Creating Initial Authorization: %d", status);
            return NO;
        }
    
        AuthorizationItem right = {kAuthorizationRightExecute, 0, NULL, 0};
        AuthorizationRights rights = {1, &right};
        AuthorizationFlags flags = kAuthorizationFlagDefaults | kAuthorizationFlagInteractionAllowed |
        kAuthorizationFlagPreAuthorize | kAuthorizationFlagExtendRights;
      
        status = AuthorizationCopyRights(authorizationRef, &rights, NULL, flags, NULL);
        if (status != errAuthorizationSuccess)
        {
            NSLog(@"Copy Rights Unsuccessful: %d", status);
            return NO;
        }
        
        // use chmod
        char *tool = "/bin/chmod";
        char *args[] = {"777", (char *)[location UTF8String], NULL};
        FILE *pipe = NULL;
        status = AuthorizationExecuteWithPrivileges(authorizationRef, tool, kAuthorizationFlagDefaults, args, &pipe);
        if (status != errAuthorizationSuccess)
        {
            NSLog(@"Error: %d", status);
            return NO;
        }
        
        status = AuthorizationFree(authorizationRef, kAuthorizationFlagDestroyRights);
        return YES;
    }
    

    调用方法

    bool bRet = ChmodFileWithElevatedPrivilegesFromLocation("/Library");
    if(bRet)
    {
        NSLog(@"error");
    }
    else
    {
        NSLog(@"sucess");
    }


  • 相关阅读:
    Java课程设计-计算器 丁树乐(201521123024)
    201521123024 《Java程序设计》第13周学习总结
    201521123024 《java程序设计》 第12周学习总结
    201521123024 《Java程序设计》第11周学习总结
    201521123024 java 第十周学习总结
    软工个人作业5-软件工程总结
    软工个人作业3案例分析
    结对编程练习
    软件工程网络15个人阅读2
    软工网络15个人阅读作业1
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/7402813.html
Copyright © 2011-2022 走看看