Управление другим приложением с какао - PullRequest
1 голос
/ 22 апреля 2011

У меня есть приложение, которое запускает двоичный исполняемый файл в терминале, используя

NSString *systemRun = [[NSString alloc] init];
systemRun = [systemRun stringByAppendingFormat:@"open -a Terminal %@", executable];
system([systemRun UTF8String]);

Теперь я хочу поместить кнопку «Конец» в мой графический интерфейс, и это закроет терминал.Однако прежде чем я смогу использовать NSRunningApplication для его завершения, мне нужно завершить сеанс терминала, чтобы он не предупреждал пользователя о том, что процесс входа в систему все еще выполняется.Я полагаю, что было бы проще всего сделать тип окна "выход из системы" и символ возврата.Я знаю, что могу сделать это с AppleScript, но кажется странным, что AppleScript может сделать то, чего не может Какао.Я что-то упустил?

Ответы [ 2 ]

2 голосов
/ 22 апреля 2011

STOP!

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

Если у вашего пользователя уже открыто окно терминала и он что-то делает, то ваша программа будет мешать этому, когда она попытается уничтожить Terminal.app. Если у пользователя есть Terminal.app, настроенный на отсутствие запроса перед закрытием сеанса, в котором запущен только процесс входа в систему и оболочка, то вы в конечном итоге убьете все сеансы ssh пользователя без предупреждения.

(Как бы вам понравилось, если ваш текстовый процессор велел вашему веб-браузеру отобразить страницу, а затем завершил все сеансы браузера, когда вы закрыли одну страницу?)

Как минимум, используйте open -n -W -a, но, если возможно, вообще не используйте Terminal, а просто перенаправьте стандартный вывод вашего исполняемого файла в NSTextView. Если ваш исполняемый файл должен взаимодействовать с пользователем, рассмотрите возможность использования процесса xterm, который завершится сам по себе, когда ваш процесс завершится.

0 голосов
/ 25 февраля 2013

GO!

Вы должны считать себя богом своего компьютера.К сожалению, злые люди окружили нас барами.AppleScript НЕ отправляет сообщения Objective C принимающей программе.Он отправляет события, которые получатель соглашается интерпретировать и выполнять.

См. Архитектура распределенных объектов OSX с использованием NSDistantObject, NISInvocation, NSConnection, NSPortMessage, NSPort для передачи сообщения от процесса клиента процессу сервера.Мне еще предстоит пройти путь.

См. Распределенные объекты руководство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...