2013-03-06 227 views
5

在Mac OS X(LoginItem)助手应用程序我有一个应用程序Main.app和应用Helper.app的Main.app/Library/LoginItems文件夹内。 Main.app可以由用户启动,然后用户可以将Helper.app设置为登录项目。 (使用SMLoginItemSetEnabled()),这可以很好地工作。当用户将Helper.app设置为登录项时,它也会启动。启动主应用程序

但是,也应该可以启动Helper.app而不将其设置为登录项目。我试着

[[NSWorkspace sharedWorkspace] launchApplication: newPath]; 

这给lsboxd做到这一点:不使工艺推出...错误,并与

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

至极给人否认禁止-sandbox- reinit错误。 (?大概是因为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]; 

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

谢谢,

+0

http://stackoverflow.com/questions/12971549/mac-os-sandbox-launching-main-application-from-helper - 它可以* *是一个签约的问题是会消失,一旦应用程序在应用程序商店 – Petesh 2013-03-12 17:11:26

+0

1Password(使用1Password Helper进程)似乎可以执行此操作,并且它们已被沙箱化。我真的很想知道他们是如何实现的。 – 2013-09-22 18:19:27

+0

我也在搜索这个,我只是按照你描述的方式来尝试它(除了我对硬件代码进行了硬编码,我真的不明白你为什么要这么做),它马上就能正常工作。我不知道你做错了什么(或者如果我做错了什么,这使它对我有用)。 – Sitses 2013-10-10 23:22:34

回答

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