моя система отказывается выключаться/перезапускаться с классом NSApleScript

Я использую CFPlugin для контекстного меню и наложения значков на 10.5 (так же, как scplugin). Для связи между моим приложением и искателем я использую distributed object. После установки моего плагина в папку Contextual menu items моя система отказывается перезагружаться/выключаться/выходить из системы. В мониторе активности я не могу выйти из искателя, для искателя работает только принудительный выход. На консоли я получаю 10.5.8

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

Без связи между Finder и моим приложением перезагрузка/завершение работы/выход из системы работают нормально.
В 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

Кто-нибудь может мне помочь?

ИЗМЕНИТЬ

Моя проблема решена. Я использовал NSAppleScript для выполнения сценария Apple. Теперь я использую NSTask, и моя система перезагружается/выключается/выходит из системы нормально. может ли кто-нибудь объяснить мне причину этого?


person Community    schedule 07.02.2012    source источник
comment
Я заметил, что когда вам звонят из приложения, отличного от Finder, вы возвращаете noErr. Что вы возвращаете, когда вас вызывают из Finder?   -  person user1118321    schedule 21.02.2012
comment
Если приложение является искателем, я выполняю свой код.   -  person Parag Bafna    schedule 21.02.2012
comment
И что потом возвращает?   -  person user1118321    schedule 21.02.2012
comment
он вернет OSStatus, error или noErr.   -  person Parag Bafna    schedule 21.02.2012
comment
без модуля связи мой плагин работает нормально.   -  person Parag Bafna    schedule 21.02.2012
comment
вы инициируете транзакцию DO в процессе выключения? Похоже, Finder ожидает ответа от вашего IPC-сервера.   -  person maranas    schedule 08.03.2012
comment
Моя проблема решена. Я использовал NSApleScript для выполнения скрипта Apple. Сейчас я использую NSTask.   -  person Parag Bafna    schedule 09.03.2012


Ответы (2)


NSApleScript может быть запущен только из основного потока, поэтому основной поток будет заблокирован во время его работы.

Не слишком уверен, что является основной причиной сообщения, но я предполагаю, что сценарий не может быть найден или запущен должным образом, а затем основной поток блокируется или истекает по тайм-ауту, и вся ваша последовательность завершения работы застревает.

С другой стороны, NSTask правильно многопоточен, поэтому последовательность не будет заблокирована, и ваш компьютер будет правильно выключен.

Вот несколько релевантных ссылок, собранных вокруг:

person Community    schedule 12.03.2012
comment
Я запускал сценарий Apple из вторичного потока. и только один поток за раз. - person Parag Bafna; 12.03.2012
comment
From (NSAppleScript не в основном потоке)[cocoabuilder.com/archive/cocoa/ 'Похоже, что все экземпляры NSAppleScript используют один и тот же ComponentInstance, и ComponentInstance также может использоваться основным потоком, чтобы, возможно, настроить приложение для AppleScriptable. Каждый поток должен иметь свой собственный AppleScript ComponentInstance, теоретически у вас может быть несколько потоков, каждый из которых запускает собственный AppleScript. Я предполагаю, что искатель не использует класс NSAplescript. - person Parag Bafna; 12.03.2012

Моя проблема решена. Я использовал NSAppleScript для выполнения сценария Apple. Теперь я использую NSTask, и моя система перезагружается/выключается/выходит из системы нормально.

person Community    schedule 20.07.2012