2013-03-06 29 views
5

bir Mac OS X (LoginItem) yardımcı uygulaması başlatma ben bir uygulama Main.app ve Main.app/Library/LoginItems klasörün içindeki bir uygulama Helper.app var. Main.app kullanıcı tarafından başlatılabilir ve kullanıcı Helper.app öğesini giriş maddesi olarak ayarlayabilir. (SMLoginItemSetEnabled() kullanarak, bu mükemmel çalışır. Kullanıcı Helper.app öğesini giriş maddesi olarak ayarladığında da başlatılır. Ancak, bir giriş öğesi olarak ayarlamadan Helper.app uygulamasını başlatmak da mümkün olmalıdır. Ben lsboxd verirana uygulamadan

[[NSWorkspace sharedWorkspace] launchApplication: newPath]; 

ile bunu denedim: Süreç başlatmak için izin değil ... hata ve

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

wich veren bir inkar yasak-sandbox hatasını sıfırlayın. aşağıdaki gibi (? Helper.app içindeki olduğu muhtemelen çünkü Main.app)

NEWPATH bulunur:

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

Nasıl düzeltebilirim? :)

sayesinde

+0

http://stackoverflow.com/questions/12971549/mac-os-sandbox-launching-main-application-from-helper - bu * * kez uzağa giden bir imza sorun olabilir App uygulama mağazasında – Petesh

+0

1Password (1Password Yardımcı süreci ile) bunu yapmak mümkün görünüyor ve onlar korumalı. Gerçekten nasıl başardıklarını merak ediyorum. –

+0

Ben de bunun için arama yapıyordum ve ben de bunu anlattığın şekilde denedim (yolun bir kısmını kodladığımı, neden böyle yaptığını gerçekten göremedim) ve hemen işe yaradı. Neyi yanlış yaptığınızı bilmiyorum (ya da yanlış bir şey yapıyorumsa, bu benim için çalışmasını sağlar). – Sitses

cevap

0

Ayrıca NSTask ve launchctl kullanabilirsiniz. Örnek Veya NSTask ve bash komut dosyalarını kullanabilirsiniz. Örnek:

#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 
İlgili konular