2012-02-07 20 views
14

Sto usando CFPlugin per il menu contestuale e l'icona sovrapposizione su 10.5 (come scplugin). Per la comunicazione tra la mia applicazione e il finder, sto usando distributed object. Dopo aver installato il mio plug-in nella cartella Contextual menu items, il mio sistema si rifiuta di riavviare/shutdow/Logout. Nel monitor delle attività non riesco a uscire dal finder, solo la forza di uscita è sveglia per finder. su console sto ottenendo sul 10.5.8il mio sistema si rifiuta di spegnere/riavviare con la classe NSAppleScript

ERROR | -[ApplicationManager(AppleEventHandling) _tryQuitAllForRequestor:replyEvent:] | _tryQuitAllForRequestor - _vproc_set_global_on_demand returned error -1805620379 

Senza la comunicazione tra Finder e la mia domanda, il riavvio del sistema/shutdow/Logout stanno lavorando bene.
Su 10.5.4

loginwindow[41]: ERROR | WSActivateApp | SetFrontProcess({0, 7980956}) returned error -600. Unable to activate process. 

loginwindow[41]: ERROR | -[ApplicationManager(AppleEventHandling) _tryQuitAllForRequestor:replyEvent:] | _tryQuitAllForRequestor - _vproc_set_global_on_demand returned error -1780878507 

Qualcuno può darmi una mano?

EDIT

Il mio problema è risolto. Stavo usando NSAppleScript per l'esecuzione di script Apple. Ora sto usando NSTask e il mio riavvio/shutdow/logout del sistema stanno funzionando bene. qualcuno può spiegarmi una ragione per questo?

+0

Ho notato che quando vieni chiamato da un'app diversa dal Finder, restituisci "noErr". Cosa ritorni quando sei chiamato dal Finder? – user1118321

+0

Se l'applicazione è finder, sto eseguendo il mio codice. –

+0

E poi cosa restituisce? – user1118321

risposta

0

Il mio problema è risolto. Stavo usando NSAppleScript per l'esecuzione di script Apple. Ora sto usando NSTask e il mio riavvio del sistema/shutdow/Logout stanno funzionando bene

1

NSAppleScript può essere eseguito solo dal thread principale, quindi il thread principale verrà bloccato mentre è in esecuzione.

Non sono sicuro di quale sia la causa principale del messaggio, ma suppongo che lo script non possa essere trovato o eseguito correttamente, quindi il thread principale è bloccato o scaduto e tutta la sequenza di shutdown si blocca.

Sul lato opposto, NSTask è correttamente multithread in modo che la sequenza non venga bloccata e il computer si spenga correttamente.

Qui ci sono un paio di link pertinenti riuniti intorno:

+0

Ero in esecuzione lo script Apple dal thread secondario. e solo un thread alla volta. –

+0

Da (NSAppleScript non nel thread principale) [http://www.cocoabuilder.com/archive/cocoa/163902-nsapplescript-not-in-the-main-thread.html # 164093] 'Tutte le istanze di NSAppleScript sembrano utilizzare la stessa ComponentInstance, anche la ComponentInstance può essere utilizzata dal thread principale, per impostare forse l'applicazione AppleScriptable. Ogni thread deve avere la propria ComponentInstance di AppleScript, in teoria è possibile avere più thread ciascuno in esecuzione proprio AppleScript ' Suppongo che il finder non stia utilizzando la classe NSApplescript. –