2017-08-16 66 views

回答

0

我現在用一種古怪的方式解決了這個問題。我使用NSTask連同sudoopen。也許有人需要這個在將來:

+ (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; 
} 
0

在你啓動守護進程的plist中,這應該都在/ Library/LaunchDaemons寫的守護進程,您可以設置UserName鍵:

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

其中userForThisProcess是要用戶用於運行應用程序。

+0

我想你誤解了我:我想從一個根進程作爲特定用戶啓動一個進程。我通過將NSTask與sudo結合使用來解決此問題。 – Nidhoegger

+0

然後也許[這會幫助](https://stackoverflow.com/questions/15474249/launching-a-user-context-application-by-root-daemon-on-demand)。 – TheDarkKnight

相關問題