是否有可能在沙箱中运行的应用程序执行shell脚本? 该脚本使用两个基本命令:
defaults write
killall
我知道沙盒有一些例外,可以通过授权文件添加,但不确定是否可以让用户确认小脚本的执行然后运行它?
请给我一个实际的提示...... 当我关闭沙箱运行我的应用程序时,一切正常。 使用沙盒时,两个命令都不起作用,这将显示在控制台中:
killall: warning: kill -TERM 12322: Operation not permitted
答案 0 :(得分:2)
当应用程序为沙盒时,可以从NSApplicationScriptsDirectory
目录运行脚本。
NSURL *scriptsDirectory = [[NSFileManager defaultManager] URLForDirectory:NSApplicationScriptsDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:&error];
那么用户如何为想要运行脚本的应用程序授予访问权限?
该机制非常简单:您的应用程序只能从用户帐户中的特定文件夹运行脚本。脚本可以进入该文件夹的唯一方法是用户在那里复制它们。从本质上讲,OS X为您提供了这些脚本中的内容的只读视图。
https://www.objc.io/issues/14-mac/sandbox-scripting/
关于这个主题的一篇很棒的文章^^^
答案 1 :(得分:0)
为什么你想首先沙盒这么强大的App呢?您是想修改特定其他应用程序(某种可能的话)的默认值和killall,还是“机器上存在的所有应用程序”?
如果对于特定的其他应用,为什么不在没有shell的情况下进行? 对于默认值,使用com.apple.security.temporary-exception.shared-preference.read-write并添加您想要修改的域(例如com.apple.DigitalColorMeter)并使用CFPreferencesSetValue()
对于killall,使用com.apple.security.temporary-exception.apple-events并运行Applescript /发送AppleEvents以终止特定进程。
答案 2 :(得分:0)
如果你有充分的理由可以杀死这样的应用程序:
How can I terminate my app in a helper app with sanboxing enabled?