我有代码
system("reboot")
reboot
命令在终端中可用,但是即使我以root用户身份运行该应用程序,该操作仍然会被拒绝。有没有人找到任何可行的方法,或者可以解释一下 SBSetting的重新启动,这使我感到好奇? 最佳答案
尽管有些麻烦,但我想出了一种解决方法。问题是,即使您将应用程序设置为以根身份运行,当您进行system()
调用时,您显然仍然受到用户移动特权的限制。由于移动无法(成功)调用重新启动,因此无法正常工作。
我解决此问题的方法是利用 SBSettings 支持的新功能。 SBSettings具有运行的特权后台驻留程序进程。它允许您通过简单地编写脚本(或其他可执行文件)并将其转储到适当的目录(/var/mobile/Library/SBSettings/Commands
)中来插入自己的命令。重新启动sbsettingsd进程后,可以通过发布通知来使其运行脚本。如果您命名脚本
com.mycompany.reboot
然后可以在您的应用程序中执行以下代码:
#import <notify.h>
notify_post("com.mycompany.reboot");
然后,将 com.mycompany.reboot 变成一个简单的shell脚本,如下所示:
#!/bin/sh
reboot
并确保在com.mycompany.reboot脚本上使用chmod 755。可以在以下位置找到该SBSettings命令功能的完整详细信息:
http://thebigboss.org/guides/sbsettings-toggle-spec(请参阅调用外部函数和脚本 ...)
无论如何,它确实需要您的应用依赖于SBSettings,但是它是一个免费的应用,并且大多数用户可能仍然希望拥有它。目前,它已通过
notify_post()
以编程方式实现了重新引导(或任何其他需要root用户访问权限)的目标。