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 に答える