我的应用程序在 root 下启动,我需要能够使用 NSTask 和 launchctl 卸载进程这是我做的代码:
NSPipe *pipe = [NSPipe pipe];
NSTask *task = [[NSTask alloc] init];
[task setLaunchPath: @"/bin/launchctl"];
[task setCurrentDirectoryPath:@"/"];
[task setStandardError:pipe];
NSLog(@"/bin/launchctl unload %@", plistAutostartLocation);
NSArray *arguments;
arguments = [NSArray arrayWithObjects: enableCommand, plistAutostartLocation, nil];
[task setArguments: arguments];
NSFileHandle * read = [pipe fileHandleForReading];
[task launch];
[task waitUntilExit];
如果需要卸载的进程是在“root”下启动的,那么如果不是失败,它就会成功卸载。问题是如何在特定用户下运行“launchctl”(例如“myusername”)?
编辑:在终端中,如果我想在特定用户下运行某些命令,我接下来会执行它,它运行良好:
su - 我的用户名 -c "ls /用户/我的用户名"
但是当我尝试在特定用户下运行“launchctl”时它失败了:
su - myusername -c "launchctl load /Library/LaunchAgents/com.google.keystone.agent.plist"
它说:“没有发现加载”