登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> SoftHub关联区 >> 主题: [macos/objectc]一个可能已经无效的方法 - Objective-C MacOS以管理员权限执行程序     [回主站]     [分站链接]
[macos/objectc]一个可能已经无效的方法 - Objective-C MacOS以管理员权限执行程序
clq
浏览(397) - 2023-11-08 13:14:09 发表 编辑

关键字:


http://www.noobyard.com/article/p-fzujbrzy-gr.html

Objective-C MacOS以管理员权限执行程序
时间 2019-12-13
标签 objective c macos 管理员 权限 执行 程序 栏目 C&C++ 繁體版
原文
https://www.cnblogs.com/tlnshuju/p/7402813.html

在MacOS下很是多操做是需要管理员权限的, 比方咱们执行chmod。在命令行下可以使用sudo chmod来申请以管理员权限执行。但是使用XCode写的程序是不能使用sudo的。post

需要本身写代码来申请权限。如下是一个样例。 以管理员身份执行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");
}




--------------------------------------------------------
https://blog.csdn.net/SysProgram/article/details/46834201

在MacOS下可以使用AuthorizationExecuteWithPrivileges函数以管理员身份运行某个程序,凡是以管理员权限运行会弹出一个输入密码的框。 而被执行的这个程序如果再以管理员权理去执行另外一个程序,又会弹出一个框。这说明权限是没有继承的。写过Windows程序的人应该知道, Win7上如果以管理员身份运行程序是会弹出UAC提示的, 但是被运行的这个程序, 如果再去运行其他程序, 那么其他程序就都是管理员身份了,而且不会弹UAC提示, 这说明权限是继承的。下面我们实现Mac下的权限继承



总数:0 页次:1/0 首页 尾页  
总数:0 页次:1/0 首页 尾页  


所在合集/目录
macos权限 更多



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1