Perché una riga di comando cambia in ~ / Library / Preferences / com.apple.LaunchServices.plist non è efficace immediatamente?

6

Quando la finestra Informazioni di Finder viene utilizzata per associare file di un particolare tipo a un'applicazione:

  • la preferenza è immediatamente effettiva.

Quando Terminal viene utilizzato per creare un'aggiunta comparabile a ~/Library/Preferences/com.apple.LaunchServices.plist

  • la preferenza è non immediatamente effettiva.

Domanda

Perché i servizi di lancio non rispettano immediatamente una scrittura per com.apple.LaunchServices.plist dell'utente?

Una risposta ideale potrebbe essere un riferimento a una pagina nell'area degli sviluppatori Apple.

Le risposte non richiedono l'esecuzione di un comando.

Sfondo

Agente o demone?

Chiedendo se un demone o un agente apporta modifiche a questo. Plist efficace, ho eseguito:

sudo launchctl list

Nell'elenco, sotto l'intestazione etichetta , non vedo nulla che possa riguardare Avvia servizi .

Riferimenti

Una risposta alla domanda Stack Overflow Come impostare l'applicazione predefinita per tipi di file specifici in Mac OS X? suggerisce:

… to be reloaded. You can logout, wait a few minutes or force launchservices to restart …

Nel mio caso:

La risposta accettata alla domanda Super User C'è un modo più rapido per modificare le app predefinite associate ai tipi di file su OS X? suggerisce:

… restarting the OS to apply changes (logging out and back in isn't enough) …

- se è sufficiente un riavvio, è probabilmente meno dispendioso in termini di tempo rispetto all'uccisione, quindi eseguire il seeding del database dei servizi di avvio.

    
posta Graham Perrin 29.04.2012 - 16:01
fonte

1 risposta

7

Da Apple Guida alla programmazione dei servizi di lancio (tutto il mio enfasi):

All applications available on the user’s system must be registered to make them known to Launch Services and copy their document binding and other information into its database. It isn’t ordinarily necessary to perform this task explicitly, since a variety of utilities and services built into the Mac OS X system software take care of it automatically:

  • A built-in background tool, run whenever the system is booted or a new user logs in, automatically searches the Applications folders in the system, network, local, and user domains and registers any new applications it finds there. (This operation is analogous to “rebuilding the desktop” in earlier versions of Mac OS.)
  • The Finder automatically registers all applications as it becomes aware of them, such as when they are dragged onto the user’s disk or when the user navigates to a folder containing them.
  • When the user attempts to open a document for which no preferred application can be found in the Launch Services database, the Finder presents a dialog asking the user to select an application with which to open the document. It then registers that application before launching it.

In spite of these automatic registration utilities, it may sometimes be necessary to register an application explicitly with Launch Services. For example, although developers are encouraged to package their applications so that they can be installed by simply dragging them onto the user’s disk, some applications may require more elaborate custom installer software. In such cases, the installer should call one of the Launch Services registration functions LSRegisterFSRef or LSRegisterURL to register the application explicitly.

Nota le chiamate API richieste dall'unica procedura di registrazione manuale con nome ( fonte non disponibile su opensource.apple.com , temo).

Mentre aggirava un bug nell'elaborazione di Launch Services su Leopard con FileVault abilitato , ho notato che ~/Library/Preferences/com.apple.LaunchServices.plist è:

  • elaborati solo all'accesso dopo l'avvio, come dati di input per l'accumulo del database di Launch Services corretto (Leopard abilitato a FileVault spesso non riusciva a eseguire questo passo, con conseguente apparente perdita delle impostazioni dell'utente); e

  • memorizzato nella cache fino a quando la macchina non viene riavviata.

In poche parole, è il livello di persistenza del dominio utente di Servizi di avvio e le modifiche a quel livello di persistenza sono riconosciute solo al prossimo processo - riavvio o reseed .

    
risposta data 15.05.2012 - 23:06
fonte

Leggi altre domande sui tag