2

是否可以让一个在沙箱中运行的应用程序执行一个 shell 脚本?该脚本使用两个基本命令:

defaults write
killall

我知道沙盒有一些例外,可以通过权利文件添加,但不确定是否可以让用户确认小脚本的执行然后运行它?

请给我一个实用的提示......当我在关闭沙盒​​的情况下运行我的应用程序时,一切正常。两个命令上的沙箱都不起作用,这显示在控制台中:

killall: warning: kill -TERM 12322: Operation not permitted
4

3 回答 3

3

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/

关于这个主题的一篇很棒的文章^^^

于 2017-01-18T02:16:30.453 回答
0

为什么你首先要对如此强大的应用程序进行沙箱处理?你想修改默认值并杀死特定的其他应用程序(以某种方式可能)或“机器上存在的所有应用程序”吗?

如果对于特定的其他应用程序,为什么不不用外壳呢?对于默认写入使用 com.apple.security.temporary-exception.shared-preference.read-write 并添加您要修改的域(例如 com.apple.DigitalColorMeter)并使用 CFPreferencesSetValue()

对于 killall 使用 com.apple.security.temporary-exception.apple-events 并运行 Applescript / send AppleEvents 以终止特定进程。

于 2013-11-13T12:47:08.677 回答
0

如果你有充分的理由可以杀死这样的应用程序:

如何在启用了 sanboxing 的帮助应用程序中终止我的应用程序?

于 2014-10-20T19:27:37.040 回答