安装程序激活后DriverKit消失了

问题描述

这真是一个奇怪的情况。 我的应用程序是与我的driverkit驱动程序通信的用户代理,根据我们的设计,此应用程序(名为myAgent.app)会激活我的驱动程序(名为myDriverKit),因为myAgent.app启动后便会与myDriverKit进行通信。在我们的测试中,我通过plist手动加载它,内容是:

CONSOLE_USER=$(stat -f%su /dev/console)
su -l "$CONSOLE_USER" -c '/bin/launchctl load /Library/LaunchAgents/com.myCom.myAgent.plist' 2> /dev/null

一切运行良好(在尚未获得授权的情况下,在SIP下)。

然后,我们将其打包,myDriverKit在安装过程中被激活时看起来运行良好,安装后脚本最后写着:

systemextensionctl list

但是,重新启动后,myDriverKit不再起作用了!当我使用systemextensionctl reset查找它时,它看起来像是生存了,但是检查控制台,通过日志流将其钩住,我找不到了。除非我手动执行chmod 644 com.myCom.myAgent.plist并重新启动myAgent.app以使其能够永久生存。

我做了几次测试:

  1. 不要自动launchctl加载myAgent,而是在安装完成后自己手动加载->可以。
  2. /usr/bin/sudo -u $USER /bin/launchctl load -S Aqua /Library/LaunchAgents/com.kensington.trackballworks.plist然后重新构建程序包-​​>失败
  3. 在安全性中不允许myDriverKit,然后在重新启动后允许它->有效
  4. 在安装后脚本中使用private String makeUrl(String textFromEditText) { String oldLink = textFromEditText; textFromEditText="https://www.googleapis.com/books/v1/volumes?download=DOWNLOAD_UNDEFINED&filter=FILTER_UNDEFINED&libraryRestrict=LIBRARY_RESTRICT_UNDEFINED&maxResults=20&orderBy=relevance&printType=ALL&q="; textFromEditText+=URLEncoder.encode(oldLink); textFromEditText+="&key=AIzaSyCJmeSLPw147mRSnc2nZNgPSbebtH-RxDc"; Log.v("makeURL",stringBuilder.toString()); return textFromEditText; } 代替-> fail

似乎myAgent.app由安装脚本启动与我自己启动不同。可能的根本原因是什么?是可能在发布脚本中还是在myAgent.app激活过程中?谢谢Orz。

解决方法

我会自己回答这个问题。这种奇怪情况的根本原因是在安装程序处理kextcache时,用户激活(在安全性中单击允许按钮的那一刻)。

如果我们指定一个扩展名以.pkg格式复制到/ Library / Extensions /,则安装程序将在安装过程中自动执行kextcache。这就是安装程序需要这么长时间才能完成安装的原因。

如果用户在kextcache处理期间激活了dext,则该dext似乎可以正常工作,但是重新启动后,即使发出systemextensionctl list时它显示“ Activated enabled”,该dext也不起作用。

在我看来,这应该是macOS中的错误。