Bir uygulamanın Giriş Sırasında başlatılmasını nasıl önleyebilirim?


6

Giriş kullanarak başlatmak için kendini ayarlayan bir uygulama oluşturduk SMLoginItemSetEnabled. İşte kullandığı kod. Sorum şu, bu uygulamayı oturum açma sırasında başlatmayı el ile nasıl kaldırabilirim ?

Uygulama "Giriş Öğeleri" altında veya /Library/LaunchAgentsveya /Library/LaunchDaemonsveya /Users/username/Library/LaunchAgentsveya /Users/username/Library/LaunchDaemonsklasörlerde gösterilmez. Ben de etrafına baktı /Library/Preferencesve PreferecePanes, ama hiçbir şey bulunamadı. Uygulamaya giriş sırasında yüklenmiyor.


Uygulamayı kaldırırsanız (diskten) Konsol ne diyor?
Martin Marconcini

Uygulamayı kaldırırsam (çalışmıyor olsa bile), onu Çöp Kutusu'na taşıyabilirim, ancak Çöp Kutusu'nu boşaltmaya çalıştığımda, Uygulamayı silmez.
Tarandeep Gill,

Bunun için hiç bir çözüm buldunuz mu? Aynı merak ediyorum.
Klaas

Bazıları burada listeleniyor gibi görünüyor: /var/db/com.apple.xpc.launchd/disabled.$UID.plist
Klaas

Yanıtlar:


2

Yardımcıyı launchdkomut satırından durdurabilir ve kaldırabilmelisiniz . Terminal.app dosyasını açın ve yapın

launchctl list | grep -i com.your.helper

Job_label'i üçüncü sütunda bulduktan sonra bakabilirsiniz.

sudo launchctl stop com.your.helper
sudo launchctl remove com.your.helper

Kullanım kılavuzu buradalaunchctl bulunabilir


0

Ve eğer bir yardımcı ile eklediyseniz, dediğiniz gibi, o zaman bunu pistte görebilmelisiniz (sanırım).

Şuna bir bak:

-(BOOL)appIsPresentInLoginItems
{
    NSString *bundleID = @"com.madebynotion.myLoginHelper";
    NSArray * jobDicts = nil;
    jobDicts = (NSArray *)SMCopyAllJobDictionaries( kSMDomainUserLaunchd );
    // Note: Sandbox issue when using SMJobCopyDictionary()

    if ( (jobDicts != nil) && [jobDicts count] > 0 ) {

        BOOL bOnDemand = NO;

        for ( NSDictionary * job in jobDicts ) {

            if ( [bundleID isEqualToString:[job objectForKey:@"Label"]] ) {
                bOnDemand = [[job objectForKey:@"OnDemand"] boolValue];
                break;
            } 
        }

        CFRelease((CFDictionaryRef)jobDicts); jobDicts = nil;
        return bOnDemand;

    } 
    return NO;
}

kaynak: http://blog.mcohen.me/2012/01/12/login-items-in-the-sandbox/


1
Cevabınız Martin için teşekkürler. Ancak manuel olarak kaldırmak için bir program arıyorum (program kullanmadan). Bu PList dosyası sistemde nerede saklanıyor?
Tarandeep Gill,

Oh sorun değil. Kodu eklememin sebebi, ne yaptığını görmektir. Uygulamanızın kutsanmış dizinde olmalı ... belki de hiç düşünmedim. Ben bir göz
atacağım

0

Giriş öğeleri ~ / Library / Preferences / com.apple.loginitems.plist'te saklanır ve kenar çubuğundaki kullanıcı hesabınız -> Giriş Öğeleri sekmesinde Sistem Tercihleri ​​-> Kullanıcılar ve Gruplar -> içinde manuel olarak yönetilebilir.


Sorun bu. Uygulama, Giriş Öğeleri sekmesi altında görünmüyor ve ~/Library/Preferences/com.apple.loginitems.plisther ikisinde de listelenmiyor !
Tarandeep Gill,

0

Uygulamayı kaldırırsam (çalışmıyor olsa bile), onu Çöp Kutusu'na taşıyabilirim, ancak Çöp Kutusu'nu boşaltmaya çalıştığımda, Uygulamayı silmez.

Çöpündeyken, mac'u tek kullanıcı modunda yeniden başlat ( cmd+ tuşunu basılı tutarak başlat s): bu bir Terminal penceresinde açılacak,

sudo rm -Rf ~/.Trash/*

ve düğmesine basın enter, ardından normal şekilde yeniden başlatın.


0

Öğenin başlatılmasını durdurabilirsiniz .launchctl disable gui/$UID/bundle-id

Paket kimliğini bilmiyorsanız, yazarak bulabilirsiniz launchctl list. Bu, kullanıcının altında çalışan tüm işlemleri, ilk sütundaki PID'leriyle listeler . Yani, eğer bunu gördüyseniz:

$ launchctl list
-   0   com.apple.SafariHistoryServiceAgent
277 0   com.apple.Finder
-   0   com.apple.quicklook
-   0   com.apple.parentalcontrols.check
[…]
189 0   com.example.ExampleDaemon
-   0   com.apple.java.InstallOnDemand

… İstenmeyen uygulamanın PID'sinin, paket kimliğini yapan 189 olduğunu doğrulamak için Aktivite İzleyicisi'ni kullanabilirsiniz com.example.ExampleDaemon. Sonra:

launchctl disable gui/$UID/com.example.ExampleDaemon

Bu kadar. Orada olan diskte giriş öğenin bir rekor hala sadece etkisiz. Temizlemek veya daha fazla bilgi edinmek istiyorsanız, okumaya devam edin.


Karşı tuhaf (ama eğlenceli?), Liste buraya kaydedilir:

/var/db/com.apple.xpc.launchd/disabled.$UID.plist

Bu dosya şöyle bir şeye benzeyecek:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.example.ExampleDaemon</key>
    <false/>
</dict>
</plist>

Evet, falsebu paket kimliğine sahip bir uygulamanın başlangıçta başlatılması gerektiği anlamına gelir . Çalıştırdıktan sonra launchctl disable, falsea olarak değişecektir true. (Söyleyebildiğim kadarıyla, launchd bu dosyaları hemen yazmaz, bu nedenle yeniden başlatana kadar göremeyebilirsiniz.) Devre dışı bırakılmış öğeleri bu komutla görebilirsiniz:

launchctl print-disabled gui/$UID

Ayrıca burada depolanan her bir giriş öğesiyle ilgili bazı ek bilgiler de var, ancak kaldırılması öğenin başlatılmasını engellemeyecek:

/var/db/com.apple.xpc.launchd/loginitems.$UID.plist

Kapatılırken / yeniden başlatıldığında, sistem çalışırken yaptığınız değişikliklerin üzerine yazılacaktır. Bu yüzden, söyleyebileceğim kadarıyla, bir öğeyi tamamen kaldırmanın tek yolu disabled.$UID.plist, tek kullanıcı modunda yeniden başlatmak ve orada düzenlemeleri yapmak. Çalıştırmasanız bile launchctl disable, bir key/ falseçiftin bu dosyadan kaldırılması uygulamanın giriş sırasında başlatılmasını önler. Bu cevabı bu dosyaları tek kullanıcı modunda düzenleme talimatlarını dahil etmeyeceğim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.