2013-03-06 223 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