Come impedire a un'app di avviarsi all'accesso?

5

Ho creato un'app, che si imposta per l'avvio su Login utilizzando SMLoginItemSetEnabled . Qui è il codice che usa. La mia domanda è, come posso rimuovere manualmente questa app dall'avvio all'accesso ?

L'app non viene visualizzata in "Elementi di accesso" o /Library/LaunchAgents o /Library/LaunchDaemons o nelle cartelle /Users/username/Library/LaunchAgents o /Users/username/Library/LaunchDaemons . Mi sono guardato attorno in /Library/Preferences e PreferecePanes , ma non ho trovato nulla. L'app viene caricata al login.

    
posta Tarandeep Gill 12.02.2013 - 02:42
fonte

5 risposte

2

Dovresti poter fermare e rimuovere l'helper da launchd dalla riga di comando. Apri Terminal.app e fai

launchctl list | grep -i com.your.helper

Guarda una volta che hai trovato job_label nella terza colonna, puoi eseguire

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

Il manuale per launchctl può essere trovato qui

    
risposta data 26.05.2015 - 09:29
fonte
0

E se lo hai aggiunto con un aiutante, come hai detto tu, dovresti essere in grado di vederlo nel plist (credo).

Dai un'occhiata a questo:

-(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;
}

fonte: link

    
risposta data 12.02.2013 - 02:51
fonte
0

Gli elementi di accesso sono memorizzati in ~ / Library / Preferences / com.apple.loginitems.plist e possono essere gestiti manualmente in Preferenze di Sistema - > Utenti e amp; Gruppi - > il tuo account utente nella barra laterale - > Scheda Elementi di accesso.

    
risposta data 12.02.2013 - 03:49
fonte
0

If I remove the app (even when it's not running), I can move it to Trash, but when I try to empty Trash, it won't delete the App.

Quando è nel cestino, riavvia il mac in modalità utente singolo (inizia tenendo premuto cmd + s ): questo si aprirà in una finestra di Terminale, esegui

sudo rm -Rf ~/.Trash/*

e premi invio , quindi riavvia normalmente.

    
risposta data 26.05.2015 - 14:50
fonte
0

Puoi interrompere l'avvio dell'elemento con launchctl disable gui/$UID/bundle-id .

Se non conosci l'ID del bundle, puoi trovarlo digitando launchctl list . Questo elencherà i processi tutti in esecuzione sotto il tuo utente, con i loro PID nella prima colonna. Quindi, se hai visto questo:

$ 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

... potresti utilizzare Activity Monitor per confermare che il PID dell'app indesiderato è 189, il che rende il suo ID bundle com.example.ExampleDaemon . Poi:

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

Questo è tutto. Lì è ancora un record della voce di accesso su disco, semplicemente disabilitato. Se vuoi eliminarlo, o semplicemente vuoi saperne di più, continua a leggere.

Controintuitivamente (ma in modo divertente?), la lista è salvata qui:

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

Quel file sarà simile a questo:

<?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>

Sì, il false indica che all'avvio verrà lanciata un'app con l'id del gruppo dovrebbe . Dopo aver eseguito launchctl disable , false cambierà in true . (Per quanto ne so, launchd non scrive questi file subito, quindi potresti non vederlo fino al riavvio.) Puoi vedere gli elementi disabilitati con questo comando:

launchctl print-disabled gui/$UID

Ci sono anche alcune informazioni aggiuntive su ogni elemento di accesso memorizzato qui, ma rimuoverlo non impedirà l'avvio dell'elemento:

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

Qualsiasi modifica apportata mentre il sistema è in esecuzione verrà sovrascritta quando si spegne / si riavvia. Quindi, per quanto posso dire, l'unico modo per rimuovere completamente un elemento da disabled.$UID.plist è riavviare in modalità utente singolo e apportare le modifiche lì. Anche senza aver eseguito launchctl disable , la rimozione di una coppia key / false da questo file impedisce l'avvio dell'applicazione al momento dell'accesso. Non includerò le istruzioni per modificare questi file in modalità utente singolo in questa risposta.

    
risposta data 31.07.2017 - 03:25
fonte

Leggi altre domande sui tag