2016-09-06 1 views
1

Я создал деинсталлятор для моего драйвера, который удаляет соответствующий файл plist от /Library/LaunchDaemons, так что он не будет загружен снова при запуске в следующем загрузочном цикле. Однако, похоже, что это не влияет на мой драйвер, который по-прежнему загружается нормально после загрузки машины.Invalidate kextcache после удаления файла с драйвером launchd plist

После того, как я провел исследование в этом вопросе, я выяснил, что причиной этого является kextcache, и для того, чтобы очистить/аннулировать его, мне нужно указать папку, в которой установлен целевой том установки. однако это не имело никакого эффекта.

Мой вопрос заключается в том, как правильно аннулировать кеш kext, чтобы launchddd не загружал kext после удаления соответствующего файла plist.

Благодаря ответу ниже я сделал недействительным кеш-кеш. Тем не менее, я хотел бы иметь эквивалент для доступа к существующей папке в объекте-c, на котором основан мой помощник деинсталлятора.

Чтобы быть точным, вот код, который я хотел бы преобразовать в Objective-C:

sudo touch /System/Library/Extensions; sudo touch /Library/Extensions

ответ

2

Правильный способ сделать недействительными Kext кэшей

sudo touch /System/Library/Extensions 

или в ОС версии, поддерживающие загрузочные расширения из/Библиотека:

sudo touch /Library/Extensions 

Как только вы это сделаете, кеши kext автоматически восстанавливаются.

+0

Кажется, что это работает, когда я набираю его вручную, но когда я запустил его из applescript с помощью утилиты для удаления цели-c, я ничего не сделал. возможно, вы можете сказать мне, что не так с моим кодом 'NSString * script = [NSString stringWithFormat: @" сделать shell-скрипт \ "touch/Library/Extensions /; touch/System/Library/Extensions/\ "с правами администратора"]; NSAppleScript * appleScript = [[NSAppleScript new] initWithSource: script]; '. Обратите внимание, что я запускал его в привилегированном режиме. – Zohar81

+0

Я также был бы рад услышать, если у вас есть лучший способ сделать эту команду из uninstallerHelper, который написан на объективе C, но я мог бы подумать об изменении его на другой язык, если он будет стоить усилия. – Zohar81

+0

Вам необходимо использовать абсолютный путь к/usr/bin/touch, потому что переменная среды PATH намеренно пуста в этой среде, чтобы предотвратить использование помощников для запуска произвольного кода с правами root. – dgatwood