我有代码

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用户访问权限)的目标。

10-07 14:21