Objective-C MacOS以管理员权限运行程序

原创 2015年07月10日 19:03:55

在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");
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

解决每次运行Xcode都需要输入密码问题

刚买的电脑,安装xcode后,每次运行模拟器都会出现让输入管理员密码的问题,上网搜了很多解决办法,最后整理了一下: 1、打开终端 2、输入DevToolsSecurity --status 上面的指令...

Mac应用程序提升为管理员权限的方法

近日要开发一个小工作(功能简单,实现困难,考虑的细节太多...汗....), 需要运行一堆shell command, 这些shell command很多都要administrator的权限, 我们可...
  • czl0325
  • czl0325
  • 2015年04月09日 16:24
  • 905

"Mac OS X"想要进行更改。键入管理员的名称和密码以允许执行此操作("Mac OS X"想使用系统钥匙串)

原文地址:http://blog.csdn.net/rhljiayou/article/details/13296811 不知什么时候开始,每次我在运行xcode在真机上,或者archive...

MacOS上第一个objective-c程序

建立好iPhone开发环境后,需要学习Objective-C,这里给出一个我自己写的例子。 1. 创建类(Interface),写在myint.h中,如下: #import @interfac...

iOS开发笔记之二十九——一个关于工程目录读写权限的问题

1、从互联网上或者其他途径拿过来的工程代码,往往会报下面的提示:   (1)打开文件的时候出现窗口提示You don’t have permission to save the file “proj...
  • lizitao
  • lizitao
  • 2014年12月30日 22:59
  • 10029

app提权的方法

做Mac软件,需要以root帐户运行,所以需要提升app的权限。我记得原来在windows下只需要改一个编译选项即可,不过mac里就不行了。经过一番google,找到了2种提权方法: 1. 通过脚本...
  • ani_di
  • ani_di
  • 2011年06月29日 09:50
  • 2419

mac上GitHub Desktop客户端的使用

通常想分享我们自己写一些酷炫的动画,或者优美的自定义控件时,大多都会想到将代码代码上传到github上,github推出客户端后,为我们提供了对github更加便捷的使用,同时还能实现versions...

github desktop for mac 上传项目步骤以及注意事项

1.注册一个github账号在官网。https://github.com/github  2.下载mac版的github客户端。网址:https://desktop.github.com 3.之后会在...

c/c++语言让程序默认以管理员权限运行

本文来自第七城市,原文地址为http://www.th7.cn/system/win/2011/09/23/19675.shtml 我只是想以后万一还能用到呢,所以就转发一遍了,再次谢谢原文作者。 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Objective-C MacOS以管理员权限运行程序
举报原因:
原因补充:

(最多只允许输入30个字)