簡體   English   中英

從主應用程序啟動Mac OS X(LoginItem)幫助應用程序

[英]Launching a Mac OS X (LoginItem) helper app from the main application

我在Main.app/Library/LoginItems文件夾中有一個應用程序Main.app和一個應用程序Helper.app Main.app可以由用戶啟動,然后用戶可以將Helper.app設置為登錄項。 (使用SMLoginItemSetEnabled()),這非常有效。 當用戶將Helper.app設置為登錄項時,它也會啟動。

但是,也可以在不將其設置為登錄項的情況下啟動Helper.app。 我試過這樣做

[[NSWorkspace sharedWorkspace] launchApplication: newPath];

這給了一個lsboxd:不允許進程啟動...錯誤,並與

[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];

我怎樣才能解決這個問題? :)

謝謝,

您還可以使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM