Objective c OS X Yosemite:从用户上下文中的launchDaemon启动launchAgent
我有一个launchdaemon,它在安装应用程序后成功加载。我希望launchdaemon在用户上下文中加载launchagent。如何在10.10上实现这一点?以下方法准确无误,并经苹果公司批准Objective c OS X Yosemite:从用户上下文中的launchDaemon启动launchAgent,objective-c,macos,launchd,Objective C,Macos,Launchd,我有一个launchdaemon,它在安装应用程序后成功加载。我希望launchdaemon在用户上下文中加载launchagent。如何在10.10上实现这一点?以下方法准确无误,并经苹果公司批准 sudo launchctl bsexec "$PID" sudo -u "$USER" launchctl load /Library/LaunchAgents/pathto.plist 关注事项: 以上是苹果批准的方式吗?我希望它不会因为操作系统升级而中断 同样为了确认,launchdaemo
sudo launchctl bsexec "$PID" sudo -u "$USER" launchctl load /Library/LaunchAgents/pathto.plist
关注事项:
任何帮助都是值得的。这是我主要做的事。我不确定这是否是苹果认可和接受的编码
sudo launchctl bsexec "$PID" sudo -u "$USER" launchctl load /Library/LaunchAgents/pathto.plist
我使用下面给出的命令获取登录的n用户名。如果有多个用户登录,它会给出活动用户的名称,我指的是活动控制台用户
stat -f%Su /dev/console
可以使用su-l从LaunchDaemon加载LaunchAgent。您只需要登录的用户名作为参数
NSString *userName;
NSTask *task = [[NSTask alloc]init];
NSPipe *pipe = [NSPipe pipe];
[task setLaunchPath:@"/usr/bin/stat"];
[task setArguments:[NSArray arrayWithObjects:@"-f%Su", @"/dev/console", nil]];
[task setStandardOutput:pipe];
[task launch];
[task waitUntilExit];
userName = [[NSString alloc] initWithData:[[pipe fileHandleForReading] readDataToEndOfFile]
encoding:NSUTF8StringEncoding];
NSString *loggedInUserName = [userName stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]];
NSString *loadScript = [NSString stringWithFormat: @"su -l %@ -c \"/bin/launchctl load /Library/LaunchAgents/com.abc.appname.plist\"", loggedInUserName];
system([loadScript UTF8String]);
一句警告的话。当我们在OS版本10.9及以下版本中将RunAtLoad设置为YES时,我发现这会导致LaunchAgent访问UI(与WindowsServer相关的任何内容)时出现问题。我在10.10中从未遇到过这个问题。谢谢你的回复。是否存在任何事件或机制,您可以利用这些事件或机制来了解用户是否已登录,因为启动时会自动加载LaunchDaemon。请查看-。