如果给出应用程序的进程ID,有没有什么方法可以程序化地检测该应用程序是否在OSX沙盒环境中运行?
理想情况下,我想知道是否有 API 调用(最好是使用 C 而非 objective-C 语言编写,因为这是一个守护程序,所以不使用 Cocoa),但如果没有,还有其他检查的方法吗?
如果给出应用程序的进程ID,有没有什么方法可以程序化地检测该应用程序是否在OSX沙盒环境中运行?
理想情况下,我想知道是否有 API 调用(最好是使用 C 而非 objective-C 语言编写,因为这是一个守护程序,所以不使用 Cocoa),但如果没有,还有其他检查的方法吗?
首先,您需要从pid获取应用程序的路径,然后可以使用命令codesign --display --entitlements - app_path
查看所有授权。如果应用程序的授权中包含com.apple.security.app-sandbox,则表示它被沙盒化了。
您可以在这里查看。
要在Flex/AIR/AS3中检测沙盒,您可以使用以下的折衷方法。相同的方法也适用于objc。唯一不起作用的条件是如果文档文件夹完全为空。或者您可以使用任何其他被禁止访问的文件夹。
var file:File = File.userDirectory;
var a:Array = file.nativePath.split("/");
var userName:String = a[2];
var docFolder:File = new File("/Users/" + userName + "/Documents/");
var dirList:Array = docFolder.getDirectoryListing();
if (dirList.length>0) {
docDirectoryDisplay.text = "App is NOT sandboxed.";
} else {
docDirectoryDisplay.text = "App is sandboxed.";
}