2016-09-06 232 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