Как перезапустить текущую программу в macOS с помощью execl ("/ usr / bin / open" ...)? - PullRequest
0 голосов
/ 15 февраля 2019

Я могу успешно запустить приложение с

execl("/usr/bin/open", "open", "/Applications/Foo.app", 0);

Но это не работает, когда я вызываю его внутри Foo.app

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

Спасибо!

1 Ответ

0 голосов
/ 15 февраля 2019

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

Вы можете запустить второй экземпляр вашего приложения, выполнив приложениеИсполняемый файл пакета:

excel("/Applications/Foo.app/Contents/MacOS/Foo", ...

Хотя это не рекомендуемый способ запуска приложения Какао, инженеры Apple заверили, что это сработает.Но имейте в виду, что теперь у вас есть два запущенных приложения, которые используют один и тот же NSUserDefaults и другие ресурсы, поэтому ожидайте странного поведения (или немедленно прекратите работу первого приложения через exit()).

Имеясказал, что это, вероятно, не то, что вы хотите сделать.

Во-первых, вы не можете «обнаружить сбой и предпринять какие-либо действия», поскольку, по определению, ваше приложение упало.Существуют пакеты, которые обнаруживают сбой и регистрируют информацию о нем;ищите подобное решение для перезапуска вашего приложения.

Что касается обновлений, я бы снова направил вас к стороннему решению, например Sparkle .Он обрабатывает выход из старого приложения, его замену и последующий запуск нового нормальным способом.

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

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