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.