这真是一种奇怪的情况。我的应用程序是一个用户代理,它与我的driverkit驱动程序进行通信,通过我们的设计,这个应用程序(名为myAgent.app)激活了我的驱动程序(名为myDriverKit),因为myAgent.app开始与myDriverKit通信。在我们的测试中,我通过plist手动加载它,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.myCom.myApp</string>
<key>ProgramArguments</key>
<array>
<string>/Applications/myApp.app/Contents/Helper/myAgent.app/Contents/MacOS/myAgent</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
</dict>
</plist>一切都在完美地运行(在SIP下,当我们还没有被授予权利的时候)。
然后我们将其打包,myDriverKit在安装过程中激活时看起来运行良好,安装后脚本最后写到:
CONSOLE_USER=$(stat -f%Su /dev/console)
su -l "$CONSOLE_USER" -c '/bin/launchctl load /Library/LaunchAgents/com.myCom.myAgent.plist' 2> /dev/null然而,在重新启动后,myDriverKit不再工作了!当我使用systemextensionctl list查找它时,它看起来是存活下来的,但是检查控制台,通过日志流挂钩它,我再也找不到它了。除非我手动执行systemextensionctl reset并重新启动myAgent.app以使其能够永久生存。
我做了几次测试:
works.
chmod 644 com.myCom.myAgent.plist,中使用/usr/bin/sudo -u $USER /bin/launchctl load -S Aqua /Library/LaunchAgents/com.kensington.trackballworks.plist
似乎myAgent.app通过安装脚本启动与自己启动不同。可能的根本原因是什么?它可能在后置脚本中还是在myAgent.app激活过程中?如有任何答复,敬请见谅。
发布于 2020-09-24 09:52:44
我会自己回答这个问题。造成这种奇怪情况的根本原因是用户在安装程序处理kextcache时激活(单击安全中的“允许”按钮)。
如果我们在.pkg中指定一个kext复制到/Library/ kextcache /,安装程序将在安装过程中自动执行kextcache。这就是为什么安装程序需要这么长的时间来完成安装。
如果用户在kextcache处理过程中激活了一个dext,那么dext似乎可以工作,但是在重新启动之后,dext不会产生任何效果,即使它在systemextensionctl list发布时显示了“激活已启用”。
在我看来,这应该是macOS中的一个bug。
https://stackoverflow.com/questions/63785068
复制相似问题