[英]Mac OS X: In Objective-C or C, how to unload (stop) a LaunchDaemon managed by launched
我想知道如何編寫Objective-C或C代碼來卸載(停止)LaunchDaemon。 我要卸載的LaunchDaemon以root用戶身份運行。
我的問題基本上與這個問題相同: 如何從我的Mac應用程序加載LaunchDaemon plist 。 唯一的區別是他/她正在嘗試加載,但我想卸載。
你可以使用applescript
do shell script "launchctl unload /Library/LaunchDaemons/com.yourcompany.app.plist" with administrator privileges
從C開始,您可以使用SMJobRemove
函數。 如果作業位於系統啟動上下文中(即它位於/ 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
- 這可能需要很長時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.