objective-c - Objective C - 在可可应用程序中获得root权限以修改系统文件
问题描述
我将在 High Sierra 版本 10.13.4 的系统目录中创建/更新文件。
为此,应该获得mac os的root权限。我尝试使用此代码启动特权进程。
OSStatus LaunchPrivilegedProcess(NSString *path) {
OSStatus status;
AuthorizationRef authorizationRef;
status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment,
kAuthorizationFlagDefaults, &authorizationRef);
if (status != errAuthorizationSuccess)
{
NSLog(@"Error Creating Initial Authorization: %d", status);
return status;
}
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 status;
}
char *tool = path.UTF8String;
char *args[] = {NULL};
FILE *pipe = NULL;
status = AuthorizationExecuteWithPrivileges(authorizationRef, tool,
kAuthorizationFlagDefaults, args, &pipe);
if (status != errAuthorizationSuccess)
{
NSLog(@"Error: %d", status);
return status;
}
status = AuthorizationFree(authorizationRef, kAuthorizationFlagDestroyRights);
return status;
}
但它失败并AuthorizationExecuteWithPrivileges
出现错误代码:-60031 ( errAuthorizationToolExecuteFailure
)。
我该如何解决这个问题?
有没有其他方法可以获得更新系统文件的root权限?
解决方案
推荐阅读
- python - 使用 Python 从 QML 中动态创建的列表中访问数据
- java - 运行应用程序时排序的 ArrayList 未显示为已排序
- symfony - 如何让 Symfony 从 .env 以外的另一个文件中读取 env 变量?
- c++ - 限制连接 BSTR 的参数类型
- react-native-android - 动画不会停留在它的视图中
- powershell - 如果任何文件是新的,则排除父目录
- php - 如何从多个数组中只获取最后一个括号?PHP
- python - 将列表列表保存为csv文件python中的行
- sqlite - 谁能告诉我这有什么问题?
- security - SSL:使用 Python 请求库的证书验证失败