5

我在 Main.app/Library/LoginItems 文件夹中有一个应用程序Main.app和一个应用程序Helper.app。Main.app可由用户启动,然后用户可以将Helper.app设置为登录项。(使用 SMLoginItemSetEnabled()),这非常有效。当用户将 Helper.app 设置为登录项时,它也会启动。

但是,也应该可以在不将其设置为登录项的情况下启动 Helper.app。我试过用

[[NSWorkspace sharedWorkspace] launchApplication: newPath];

这给出了一个lsboxd: Not allowed process to launch...错误,并且

[NSTask launchedTaskWithLaunchPath:newPath arguments: [NSArray array]];

这给出了拒绝禁止沙盒重新初始化错误。(大概是因为 Helper.app在 Main.app里面?)

newPath 找到如下:

NSMutableArray *pathComponents = [NSMutableArray arrayWithArray:[[[NSBundle mainBundle] bundlePath] pathComponents]];
[pathComponents addObject:@"Contents"];
[pathComponents addObject:@"Library"];
[pathComponents addObject:@"LoginItems"];
[pathComponents addObject:@"Helper.app"];
[pathComponents addObject:@"Contents"];
[pathComponents addObject:@"MacOS"];
[pathComponents addObject:@"Helper"];
NSString *newPath = [NSString pathWithComponents:pathComponents];

我怎样才能解决这个问题?:)

谢谢,

4

1 回答 1

0

您还可以使用 NSTask 和 launchctl。示例 或者您可以使用 NSTask 和 bash 脚本。例子:

#Run Menu
if [ $(ps -u $USERNAME | grep -v grep | grep -m1 '/Library/Menu/Menu.app/Contents/MacOS/Menu' | awk '{print $5}') ]; then 
    echo "Menu already  running";
else 
    echo "Menu not  running"
    if [ $(users $USERNAME ) == $USERNAME ]; then
        echo "User logined"
        echo "running menu for user $USERNAME"
        sudo -u $USERNAME /Library/Menu/Menu.app/Contents/MacOS/Menu&
    else
        echo "User not logined"
    fi
fi
于 2013-10-22T11:06:51.977 回答