2016-09-06 233 views
1

我为我的驱动程序创建了卸载程序,它从/Library/LaunchDaemons中删除了匹配的plist文件,以便在下一个引导周期内不会再由launchd加载它。 但是,它似乎并没有对我的驱动程序仍然正常加载后启动机器上的任何影响。删除驱动程序启动后的plist文件后使kextcache无效

经过对此事的一些研究,我发现kextcache是这种行为的原因,为了清除/无效它,我需要touch安装目标卷的文件夹。但是,它没有任何影响。

我的问题是如何正确无效kext缓存,以便launchd在相应的plist文件被删除后不会加载kext。

感谢下面的答案,我无效kext缓存。但是,我希望有相当于访问我的卸载程序助手所基于的objective-c中的现有文件夹。

准确地说,这里的代码,我想转换为目标-C:

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

回答

2

无效的KEXT缓存的正确方法是

sudo touch /System/Library/Extensions 

或OS支持从/ Library加载扩展的版本:

sudo touch /Library/Extensions 

一旦你这样做,kext缓存就会自动重新生成。

+0

它似乎工作,当我手动键入它,但是当我从applescript通过objective-c卸载helper运行它时,我什么也没做。也许你可以告诉我我的代码有什么问题'NSString * script = [NSString stringWithFormat:@“do shell script \”touch/Library/Extensions /; touch/System/Library/Extensions/\“with administrator privileges”]; NSAppleScript * appleScript = [[NSAppleScript new] initWithSource:script];'。注意我在特权模式下运行它 – Zohar81

+0

我也很高兴听到如果你有更好的方法来执行这个命令从uninstallerHelper写在Objective-C,但我可能会考虑改变它为其他语言,如果它将是值得的努力。 – Zohar81

+0

您需要使用/ usr/bin/touch的绝对路径,因为PATH环境变量在该环境中故意为空,以防止帮助程序被用作以root身份运行任意代码。 – dgatwood