. 작업이 시스템 launchd 컨텍스트에있는 경우 (예 :/Library/LaunchDaemons에 있고 시스템 시작시로드되지 않은 경우로드 됨) 권한 서비스를 사용하여 kSMRightModifySystemDaemons
권한을 획득하고 권한 참조를 다음 위치로 전달해야합니다. 이 함수. 당신이 작업이 언로드-이 될 때까지 잠재적으로 시간이 오래 걸릴 수 차단하려면
AuthorizationItem authItem = { .name = kSMRightModifySystemDaemons,
.valueLength = 0,
.value = NULL,
.flags = kAuthorizationFlagDefaults };
AuthorizationRights authRights = { .count = 1,
.items = &authItem };
AuthorizationRef authorization = NULL;
OSStatus authResult = AuthorizationCreate(&authRights,
kAuthorizationEmptyEnvironment,
kAuthorizationFlagDefaults | kAuthorizationFlagInteractionAllowed | kAuthorizationFlagPreAuthorize | kAuthorizationFlagExtendRights,
&authorization);
if (authResult != errAuthorizationSuccess) {
NSLog(@"couldn't create AuthorizationRef: error %i", authResult);
} else {
CFErrorRef error = NULL;
BOOL removeResult = SMJobRemove(kSMDomainSystemLaunchd, jobLabel, authorization, waitOrNot, &error);
AuthorizationFree(authorization, kAuthorizationFlagDefaults);
// handle either success or failure
}
은 waitOrNot
플래그는 YES
로 설정해야합니다.
C 코드 :'setuid (0); 시스템 ("launchctl unload /Path/to/daemon.plist"); ' –
감사합니다, H2CO3. 하지만 그건 효과가없는 것 같습니다. – ytw
프로그램에 루트 권한이 있습니까? –