標籤:xcode objective-c macos
在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");}
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Objective-C MacOS以管理員權限運行程式