Я собираюсь создать / обновить файл в системном каталоге в High Sierra версии 10.13.4.
Для этого необходимо получить разрешение root для Mac OS.Я попытался запустить привилегированный процесс с этим кодом.
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 для обновления системных файлов?