从LaunchDaemon作为特定用户启动应用程序

时间:2017-08-16 08:37:34

标签: objective-c macos

我目前正在尝试从LaunchDaemon中作为特定用户在date | data 2015-01-23 | 15 2015-01-23 | 11 2015-02-25 | 15 2015-02-25 | 11 2015-01-25 | 24 2015-01-25 | 2 2015-01-25 | 13 2015-01-29 | 5 2015-02-28 | 12 2015-02-28 | 1 2015-05-15 | 12 2015-05-16 | 1 中启动应用程序。有没有一种方法可以在不给予程序root权限的情况下启动此应用程序?我在目标C中写守护进程。

2 个答案:

答案 0 :(得分:0)

在启动守护程序的plist中,它应位于/ Library / LaunchDaemons中,您可以设置UserName键:

<key>UserName</key>
<string>userForThisProcess</string>

其中userForThisProcess是您要用来运行应用程序的用户。

答案 1 :(得分:0)

我现在以一种古怪的方式解决了这个问题。我将NSTasksudoopen结合使用。也许有人在将来需要这个:

+ (bool)start_app_bundle_as_user:(NSString *)path with_user_name:(NSString *)user_name
{
    NSString *cmd = [NSString stringWithFormat:@"/usr/bin/sudo -i -u %@ -- open -a %@", user_name, path];
    NSTask *task = [[NSTask alloc] init];
    NSArray *args = [NSArray arrayWithObjects:@"-c", cmd, nil];
    [task setLaunchPath:@"/bin/sh"];
    [task setArguments:args];
    [task launch];
    [task waitUntilExit];
    return [task terminationStatus] == 0;
}