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 运行弹出授权框的解决方法

原文:http://www.cnblogs.com/liuzenglong/p/3351768.html  我一直没有想法去解决这个问题:打开iphone模拟器的时候,老是弹出developer...
  • kyrinleo
  • kyrinleo
  • 2014年02月02日 20:56
  • 985

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

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

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

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

MacOS获取辅助功能权限控制鼠标点击事件

昨晚玩一个模拟经营的游戏,由于升级太慢我就不停的种树卖树来换取经验值。不过重复点击10几分钟后,实在受不了。网上本来准备找个鼠标自动点击的软件用用。结果没找到趁手的。如是自己写了个。自己设置需要点击的...
  • yanghuiliu
  • yanghuiliu
  • 2016年11月29日 15:13
  • 1605

obj c 学习:对plist的修改及权限获取

NSString * infoplistPath=@"/System/Library/Extensions/FTDIUSBSerialDriver.kext/Contents/Info.plist";...
  • u012720232
  • u012720232
  • 2014年05月16日 14:59
  • 1283

Mac OS X 获取Root权限代码

OSStatus myStatus; AuthorizationFlags myFlags = kAuthorizationFlagDefaults; AuthorizationRef myAut...
  • chuanyituoku
  • chuanyituoku
  • 2014年07月01日 13:27
  • 1081

再谈软链接的scp拷贝

在之前的博文中, 我们说过, 用scp拷贝目录, 那么目录下的软链会丢失, 而且拷贝的是软链所指的文件(我之前踩过一个大坑, 耗费一晚上时间, 呵呵哒)。 那要怎样才能用scp拷贝目录下的软链呢? ...
  • stpeace
  • stpeace
  • 2017年05月06日 11:10
  • 3438

Objective-C学习之常用的枚举类型以及名词的含义(持续更新)

常见名词: Tap(点击) Pinch(捏合) Rotation(旋转) Swipe(滑动,快速移动,是用于监测滑动的方向的) Pan (拖移,慢速移动,是用于监测偏移的量的) LongPress(长...
  • yxys01
  • yxys01
  • 2016年05月25日 14:15
  • 282

Windows7 自动“以管理员身份运行”某程序

自从 VirtualBox 设置了共享目录之后,必须以管理员身份运行才能使用软链接功能。每次开机之后,习惯性双击VirtualBox启动它,等进了系统之后发现git命令不能使用,才想起没有以管理员身份...
  • ganshuyu
  • ganshuyu
  • 2015年03月26日 11:41
  • 3173

c++中应用程序获得管理员权限运行(图标带盾牌)

方法一: 用vs设置一下就好,vs自动完成方法二的事情 1找到VS2010的快捷方式:右击——“打开文件位置” 找到VS2010的启动项目devenv.exe:右击——属性——兼容性——特权等级,...
  • fuck487
  • fuck487
  • 2016年08月15日 15:47
  • 3414
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Objective-C MacOS以管理员权限运行程序
举报原因:
原因补充:

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