Использование NSTask в качестве root — ошибка: «путь запуска недоступен»

#cocoa #nstask #sparkle

#cocoa #nstask #sparkle

Вопрос:

По какой-то причине, когда я пытаюсь запустить задачу через NSTask, я получаю сообщение об ошибке: «путь запуска недоступен».

Мое приложение запущено от имени root. И если я введу ТОЧНО такую же команду в терминале, она будет работать нормально, поэтому я немного запутался.

Мое приложение копирует инструмент под названием releunch в NSTemporaryDirectory() . Если я попытаюсь запустить его отсюда, я получу «путь запуска недоступен». Вот странная вещь, если я вручную скопирую инструмент на свой рабочий стол, а затем жестко закодирую путь в NSTask, он будет выполняться правильно. И я понятия не имею, почему.

Кто-нибудь знает, почему это происходит?

Примечание: К вашему сведению, пытаюсь заставить Sparkle работать с github.

Вот код:

 @try{
[NSTask launchedTaskWithLaunchPath:relaunchPath arguments:[NSArray arrayWithObjects:pathToRelaunch, [NSString stringWithFormat:@"%d", [[NSProcessInfo processInfo] processIdentifier]], nil]];
}
  

Где

 relaunchPath = @"/var/folders/zz/zzzivhrRnAmviuee           /-Tmp-/relaunch";
  

Ответ №1:

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

Добавьте @catch блок после вашего @try , чтобы увидеть, действительно ли выполняется сбой NSTask, и проверьте pathToRelaunch .

Если у вас есть @catch блок, пожалуйста, отредактируйте свой вопрос, чтобы включить его. Если выяснится, что сбой происходит при повторном запуске, но pathToRelaunch выглядит правильно, пожалуйста, отредактируйте свой вопрос, включив соответствующий исходный код из инструмента повторного запуска.