在设备中创建多个工作空间的制作方法

文档序号:13561391阅读:207来源:国知局
在设备中创建多个工作空间的制作方法

相关申请的交叉引用

本申请要求享有于2015年5月21日提交的美国非临时专利申请号14/718,733的权益,该申请的全部内容通过引用并入本文。

本申请与两者均于2015年5月21日提交的美国非临时专利申请号14/718,694和14/718,727相关。



背景技术:

企业,诸如商号和其他组织,通常会制定安全策略,其防止未经授权的用户访问企业计算资源。例如,一些安全策略要求用户必须提供的凭据,该凭据在授权用户访问企业数据之前必须被认证。

当用户操作设备以访问企业资源时,设备可以包括执行各种类型功能的若干应用程序。例如,设备可以包括网页浏览器应用程序、电子邮件应用程序、文字处理器应用程序和游戏应用程序。通常情况下,这些应用程序是从与客户端设备的用户或提供企业资源的企业无关联的应用程序开发商获得的。一些企业担心安装在设备上的应用程序可能会引入安全漏洞,其可能被利用以辅助未经授权的用户访问企业资源。

为了增强安装在设备中的应用程序的安全性,一些企业向应用程序开发商提供软件开发工具包(sdk)。这些sdk为应用程序开发商提供了一个开发环境,其辅助将安全库集成到应用程序中,以便开发商可以向应用程序添加安全和管理功能。使用sdk,应用程序开发商可以修改其应用程序的源代码,以包括由sdk提供的安全库。但是,必须重建并重新分配修改后的代码。

在另一种方法中,可以通过称为“包装(wrapping)”的过程来增强应用程序的安全性。为了包装应用程序,应用程序首先被解编译。安全库被插入到解编译的应用程序中,然后使用添加的安全库来编译应用程序。但是,包装需要访问以修改和重新打包应用程序。

附图说明

参考以下附图可以更好地理解本公开的许多方面。附图中的组件不一定按比例绘制,而是重点放在明确地说明本公开的原理。此外,在附图中,遍及若干视图,相同的参考标号表示相应的部分。

图1是联网的环境的示例的图。

图2是目标应用程序包的示例的图。

图3是托管应用程序包的示例的图。

图4是客户端设备的示例的图。

图5是示出由企业计算环境中的托管应用程序生成器实现的功能的示例的流程图。

图6是示出由客户端设备中的托管应用程序实现的功能的示例的流程图。

图7是示出由托管应用程序中的执行器实现的功能的示例的流程图。

图8-9是示出由托管应用程序中的翻译器实现的功能的示例的流程图。

图10是示出由客户端设备中的工作空间管理器实现的功能的示例的流程图。

图11-12是示出由托管应用程序中的翻译器实现的功能的示例的流程图。

图13-14是示出由客户端设备中的工作空间管理器实现的功能的示例的流程图。

具体实施方式

本公开涉及增强可以安装在客户端设备中的应用程序的安全性。在一些示例中,企业计算环境可以获得通过应用程序库分发的目标应用程序的应用程序包(applicationpackage)。企业计算环境可以基于目标应用程序的应用程序包生成托管应用程序包,并将托管应用程序包提供给客户端设备。托管应用程序包可以安装在客户端设备中以创建托管应用程序(managedapplication)。当托管应用程序在客户端设备中被执行时,托管应用程序中的加载器可以启动客户端设备中的目标应用程序的执行。

托管应用程序可以包括执行器(enforcer),其确定目标应用程序是否按照由企业计算环境指定的合规规则(compliancerule)而执行。例如,托管应用程序中的执行器可以检测到目标应用程序正在尝试删除特定文件。如果合规规则禁止目标应用程序执行此操作,则执行器可以禁止执行操作,并且还可以通知管理员客户端设备106已尝试执行未经授权的操作。

在一些示例中,工作空间管理器还可以在客户端设备中执行并创建虚拟工作空间,其中来自另一工作空间的资源与由工作空间管理器创建的工作空间隔离。例如,工作空间管理器可以创建并管理企业工作空间,其与客户端设备中的个人工作空间隔离。由于客户端设备中存在多个工作空间,所以特定应用程序的多个实例可以在客户端设备中执行。此外,不在企业工作空间中运行的组件(诸如其他应用程序)可以被禁止访问企业工作空间中的资源。

在下面的讨论中,描述了系统及其组件的示例,随后是这些系统的操作的示例。

参考图1,示出了联网的环境100的示例。联网的环境100可以包括企业计算环境103、客户端设备106和应用程序分发器计算环境109,其通过网络113进行数据通信。网络113可以包括互联网、一个或更多个内联网、外联网、广域网(wan)、局域网(lan)、有线网络、无线网络或两个或更多个这样的网络的任意组合。网络113可以包括卫星网络、有线电视网络、以太网和电话网络。

企业计算环境103可以是由企业(诸如商号或其他组织)操作的计算环境。企业计算环境103可以包括提供计算能力的计算设备(诸如服务器计算机)。可选地,企业计算环境103可以包括布置在一个或更多个服务器库(bank)或计算机库中的多个计算设备。例如,其中企业计算环境103包括多个计算设备,所述计算设备可以位于单个安装中,或者所述计算设备可以分布在多个不同的地理位置之间。

在一些示例中,企业计算环境103可以包括计算设备,其一起形成宿主计算资源或网格计算资源。在其他示例中,企业计算环境103可以作为弹性计算资源操作,其中计算相关资源(诸如处理资源、网络资源和存储资源)的分配容量随时间而变化。在其他示例中,企业计算环境103可以包括或操作为一个或更多个虚拟化的计算机实例,其可以被执行以实施本文所描述的功能。

企业计算环境103可以执行各种系统。此外,企业计算环境103可访问的数据存储116可以存储各种数据。例如,企业计算环境103可以包括管理系统119,其可以监视和管理与企业计算环境103相关联的多个客户端设备106的操作。特别地,管理系统119可以管理和监督多个客户端设备106的操作,该多个客户端设备106登记在由管理系统119辅助的管理服务中。在一个示例中,雇主可以操作管理系统119以确保其雇员的客户端设备106按照各种安全策略进行操作。通过雇主确保其雇员的客户端设备106按照安全策略进行操作,雇主可以控制和限制对与雇主以及客户端设备106的用户相关联的资源的访问。管理系统119还可以辅助访问电子邮件、日历数据、联系人信息和与企业相关联的其他企业资源。

管理系统119还可以包括托管应用程序包生成器123。如下面将进一步详细描述的,托管应用程序包生成器123可以从应用程序分发器计算环境109获得应用程序包126,诸如目标应用程序包126a,然后可以基于目标应用程序包126a生成托管应用程序包126b。虽然图1中将托管应用程序包生成器123示出为在企业计算环境103中实现,但在替代的示例中,客户端设备106可以实现托管应用程序包生成器123,使得客户端设备106可以基于目标应用程序包126a生成托管应用程序包126b。

图1所示的数据存储116代表多个数据存储116,其可以访问企业计算环境103的组件。存储在数据存储116中的数据可以包括企业数据133和合规规则136。存储在数据存储116中的企业数据133可以包括与操作企业计算环境103的企业相关联的信息。例如,企业数据133可以包括人事记录、会计记录、文字处理文档、电子表格和与企业相关联的其他数据。

合规规则136可以指定客户端设备106中的组件是否被禁止执行一个或更多个动作。例如,合规规则136可以指定客户端设备106中的组件是否被允许请求访问特定设备组件,诸如照相机、全球定位系统(gps)或网络接口。作为另一示例,合规规则136可以指定客户端设备106中的组件是否被允许执行特定操作,诸如其中内容被复制或粘贴的剪贴板操作。作为可以禁止的操作的另一示例,合规规则136可以指定客户端设备106中的组件是否被允许请求删除文件。

一些合规规则136可以指定基于各种条件(诸如客户端设备106的时间或位置)而允许动作。例如,合规规则136可以指定仅当客户端设备106位于特定地理边界内或通过特定网络接入点连接到网络113时,才允许特定动作。

应用程序分发器计算环境109可以是由分配应用程序包126的实体操作的计算环境。在一些示例中,应用程序包126可以包括android应用程序包(apk)文件。操作应用程序分发器计算环境109并分配应用程序包126的实体可以隶属或可以不隶属于操作企业计算环境103的企业或客户端设备106的用户。企业计算环境103可以包括计算设备(诸如服务器计算机),其为企业计算环境103提供计算能力。

应用程序分发器计算环境109可以包括应用程序库139,应用程序包126存储于其中。在一些示例中,应用程序库139可以是公共库,其可以被设备(诸如客户端设备106和企业计算环境103中的设备)访问。在其他示例中,应用程序库139可以是私用库,其可以仅由特定设备(诸如客户端设备106或企业计算环境103中已采用应用程序分发器计算环境109注册服务的其他设备)访问。

客户端设备106代表可以耦合到网络113的多个客户端设备106。客户端设备106可以包括基于处理器的计算机系统,诸如台式计算机、膝上型计算机、个人数字助理、手机、上网本或平板电脑。客户端设备106还可以包括输出设备(诸如显示器和音频扬声器)以及一个或更多个输入设备(诸如鼠标、键盘、触摸板或触摸屏),其辅助用户与客户端设备106进行交互和用户控制客户端设备106。

客户端设备106可以包括托管应用程序141。另外,客户端设备106可以包括操作系统143,其辅助托管应用程序129和客户端设备106中的其他组件的执行。当客户端设备106执行各种组件时,操作系统143可以管理客户端设备106的硬件和软件资源。此外,操作系统143可以提供在客户端设备106中执行应用程序的虚拟机。例如,在执行托管应用程序141时,操作系统143可以创建虚拟机的实例,其为应用程序解释可执行文件(诸如字节码)。在一些示例中,操作系统143可以包括android操作系统,其可以提供dalvik虚拟机、androidruntime(art)或另一个虚拟机或解释器的实例,用于解释java字节码并执行本地代码,诸如编译的c/c++代码。

操作系统143还可以提供各种类型的系统,诸如进程间通信组件。进程间通信组件可以辅助客户端设备106内的应用程序、服务和系统彼此通信。

托管应用程序141可以是在客户端设备106中安装托管应用程序包126b时在客户端设备106中创建的应用程序。托管应用程序141可以启动客户端设备106中目标应用程序146的执行,并且确定目标应用程序146是否正在按照已被指派给客户端设备106的合规规则136来执行。如下面将进一步详细描述的,从客户端设备106的用户的角度来看,托管应用程序129的操作可以看起来与目标应用程序146的操作相同,除了如果某些功能违反了合规规则136,则托管应用程序141可以限制目标应用程序146的这些功能之外。目标应用程序146可以被执行,并且不修改在执行期间控制的目标应用程序146。在一些示例中,目标应用程序146不需要使用sdk或被包装,以按照合规规则136来执行。

为了启动目标应用程序146的执行,托管应用程序可以包括加载器149。如下面将进一步详细描述的,加载器可以使目标应用程序146开始在客户端设备106中执行。加载器149可以对目标应用程序146透明地执行。

为了确定目标应用程序146是否按照合规规则136操作,托管应用程序129可以包括执行器153。如下面将进一步详细描述的,执行器153可以拦截来自和去往目标应用程序146的消息并解析消息以确定目标应用程序146是否正在请求要执行的特定动作。此外,执行器153可以确定所请求的动作是否违反合规规则136。执行器153可以对目标应用程序146透明地执行。

如果执行器153确定已违反合规规则136,则执行器153还可以启动补救措施。补救措施的示例包括丢弃请求要执行的禁止动作的消息、通知客户端设备106的用户违反合规规则136、通知企业计算环境103的管理员违反合规规则136以及擦除客户端设备106中的数据。

参考图2,示出了用于目标应用程序146的目标应用程序包126a的示例,其可由应用程序库139分发并由托管应用程序包生成器123获取。在一些示例中,目标应用程序包126a可以包括apk文件。目标应用程序包126a可以包括目标应用程序可执行文件203、目标应用程序资源文件206和目标应用程序清单文件209。

目标应用程序可执行文件203可以包括可在客户端设备106中执行的目标应用程序146的代码。例如,目标应用程序可执行文件203可以包括字节码(诸如编译的java字节码)或本地代码(诸如编译的c/c++代码)。客户端设备106中的虚拟机可以解释可执行文件中的字节码,并且本地代码可以通过与客户端设备106中的系统库进行交互来执行。

目标应用程序资源文件206可以包括可用于执行目标应用程序146的资源。目标应用程序资源文件206中的一些资源可以是公共资源。就这点而言,公共资源可以是由目标应用程序146以外的组件使用的资源,例如系统服务。例如,公共资源可以包括在设备的主屏幕中渲染的启动器图标。由于目标应用程序146以外的组件可以使用启动器图标,所以启动器图标可以是公共资源。

目标应用程序清单文件209可以包括目标应用程序146的配置信息。在涉及android操作系统的一些示例中,目标应用程序清单文件209可以包括androidmanifest.xml文件。目标应用程序清单文件209可以描述目标应用程序146的功能以及用于执行目标应用程序146的资源和权限(permission)。例如,除了用于执行目标应用程序146的各种组件的标识符之外,目标应用程序清单文件209还可以包括目标应用程序146的标识符。

参考图3,示出了可由托管应用程序包生成器123生成的托管应用程序141的托管应用程序包126b的示例。在涉及android操作系统的示例中,托管应用程序包126b可以包括apk文件。托管应用程序包生成器123可以包括托管应用程序可执行文件303、托管应用程序资源文件306和托管应用程序清单文件309。

托管应用程序可执行文件303可以包括可在客户端设备106中执行的托管应用程序141的代码。例如,托管应用程序可执行文件303可以包括加载器可执行文件313和执行器可执行文件316,其分别执行加载器149和执行器153的功能。此外,托管应用程序可执行文件303可以包括用于启动器组件的可执行文件,其使得在托管应用程序141开始执行时创建加载器149和执行器153。加载器可执行文件313、执行器可执行文件316和启动器组件可以包括可由客户端设备106中的虚拟机解释的字节码或者可通过与客户端设备106中的系统库进行交互来执行的本地代码。

托管应用程序资源文件306可以包括可用于执行托管应用程序141的资源。例如,托管应用程序资源文件306可以包括分别用于执行加载器149和执行器153的加载器资源319和执行器资源323。此外,托管应用程序资源文件306可以包括目标应用程序公共资源326,其可以包括目标应用程序资源文件206中的公共资源。例如,目标应用程序146的启动器图标可被包括在托管应用程序资源文件306中。

托管应用程序清单文件309可以包括分别用于加载器149和执行器15的加载器清单数据329和执行器清单数据333。此外,托管应用程序清单文件309可以包括目标应用程序清单数据336。目标应用程序清单数据336可以包括来自目标应用程序清单文件209的所有数据,其包括目标应用程序146的资源和权限的标识。

托管应用程序清单文件309还可以为托管应用程序141定义启动器组件。启动器组件可以加载托管应用程序141的加载器149和执行器153。对于涉及android操作系统的示例,托管应用程序清单文件309可以是androidmanifest.xml文件,并且所述androidmanifest.xml文件在android中可以将启动器组件定义为:android.app.application类别的子类别:<application>标签的名称属性。

接下来,描述创建托管应用程序包126b的托管应用程序包生成器123的示例。在以下描述中,托管应用程序包126尚未生成,并且托管应用程序129尚未安装在客户端设备106中。

为了开始生成托管应用程序包126b,托管应用程序包生成器123可以从应用程序库139获得目标应用程序包126a。在一些示例中,托管应用程序包生成器123可以响应于来自客户端设备106的用户的请求而获得目标应用程序包126a。例如,如果客户端设备106的用户想要在客户端设备106上安装目标应用程序146,则用户可以提交对企业计算环境103的请求以获得目标应用程序包126a并且可以生成相应的托管应用程序包126b。在其他示例中,托管应用程序包生成器123可以响应于来自企业计算环境103的管理员的请求而获得目标应用程序包126a。

在托管应用程序包生成器123已经获得目标应用程序146的应用程序包126之后,托管应用程序包生成器123可以生成用于托管应用程序包126b的托管应用程序可执行文件303、托管应用程序资源文件306和托管应用程序清单文件309。所述托管应用程序可执行文件303、托管应用程序资源文件306和托管应用程序清单文件309可以包括上述各个组件。

在托管应用程序包生成器123已经生成托管应用程序可执行文件303、托管应用程序资源文件306和托管应用程序清单文件309之后,托管应用程序包生成器123可以将这些文件打包到托管应用程序包126b中。然后,管理系统119可以将托管应用程序包126b与目标应用程序包126a一起发送到客户端设备106。在一个示例中,管理系统119可以响应于从客户端设备106接收到对托管应用程序包126b的请求,而将托管应用程序包126b与目标应用程序包126a一起发送到客户端设备106。在其他示例中,管理系统119可以自动响应于各种动作(诸如来自企业计算环境103的管理员的请求),将托管应用程序包126b与目标应用程序包126a一起发送到客户端设备106。在一个这样的示例中,管理系统119可以自动响应于来自企业计算环境103的管理员的请求,将托管应用程序包126b和目标应用程序包126a推送到客户端设备106。

接下来,描述托管应用程序141的安装和操作的示例。一旦客户端设备106已经获得托管应用程序包126b和目标应用程序包126a,客户端设备106可以将目标应用程序包126a存储在本地存储中,并安装托管应用程序包126b,从而生成托管应用程序141。当客户端设备106安装托管应用程序141时,可以从托管应用程序包126b的托管应用程序资源文件306中提取用于目标应用程序146的启动器图标。客户端设备106可以包括在主屏幕的用户界面中或在代表安装在客户端设备106中的应用程序的其他用户界面中渲染启动器图标。因为目标应用程序146的启动器图标可以被包括在代表所安装的应用程序的用户界面中,所以目标应用程序146可以看起来安装在客户端设备106中,即使它是已被安装在客户端设备106中的托管应用程序141。

用户可以使托管应用程序141以各种方式开始执行。在一个示例中,用户可以使用输入设备(诸如触摸屏或触摸板)来选择包括在客户端设备106的主屏幕中的启动器图标。当用户选择启动器图标时,操作系统143可以开始执行托管应用程序141。为此,操作系统143可以实例化托管应用程序141通过其执行的虚拟机。在涉及android操作系统的一些示例中,操作系统143可以创建dalvik虚拟机的实例,其执行托管应用程序141。

当托管应用程序141开始执行时,托管应用程序141可以首先执行启动器组件,其加载加载器149和执行器153。对于涉及android操作系统的示例,在执行特定应用程序的其他组件之前,操作系统143可以首先实例化在android中定义的android.app.application类别的子类别:androidmanifest.xml文件中的<application>标签的名称属性。因此,涉及android操作系统的示例中的启动器组件可以包括在android中定义的android.app.application类别的子类别:<application>标签的名称属性,使得操作系统143在托管应用程序141的其他组件之前开始执行启动器组件。当启动器组件执行时,启动器组件可以使加载器149和执行器153开始执行。

一旦托管应用程序141中的加载器149开始执行,加载器149可以将目标应用程序146加载到客户端设备106中的存储器中。例如,加载器149可以加载目标应用程序可执行文件203中的可执行文件并辅助目标应用程序146访问目标应用程序资源文件206中的资源。对于涉及android操作系统的示例,加载器149可以通过创建类加载器对象(如全局java.lang.classloader对象)来加载目标应用程序146的可执行文件,所述类加载器对象通过dalvik.system.dexclassloader类加载器来加载目标应用程序146的目标应用程序可执行文件203中包含的可执行文件。另外,加载器149可以使用android.app.loadedapk.getclassloader方法来将全局java.lang.classloader对象返回到目标应用程序146。

为了辅助目标应用程序146访问目标应用程序资源文件206中的资源,加载器149可以拦截来自目标应用程序146的请求目标应用程序资源文件206中的资源的消息,并将指向目标应用程序包126a的存储位置的路径返回到目标应用程序146。在涉及android操作系统的示例中,目标应用程序146可以通过发出android.app.resourcemanager.gettoplevelresources调用来请求目标应用程序资源文件206中的资源。在这些示例中,加载器149可以拦截该调用并将目标应用程序包126a的存储位置返回到目标应用程序146,所述存储位置可以包括客户端设备106的“/数据/应用程序/”目录。这样,加载器149可以启动目标应用程序146的执行,并且目标应用程序146可以在执行期间访问目标应用程序包126a中的资源。

当目标应用程序146正在执行时,目标应用程序146可以自己请求处理信息。例如,在涉及android操作系统的示例中,目标应用程序146可以发出android.app.activity.getapplication、android.app.service.getapplication或android.app.conteximpl.getapplicationcontext调用。在一些示例中,加载器149可以拦截来自目标应用程序146的用于处理信息的请求,并且向目标应用程序146返回标识目标应用程序146的对象。如果加载器149没有拦截这样的处理信息请求,则操作系统143可以返回标识已加载了加载器149和执行器153的启动器组件的对象,这可能导致目标应用程序146发生故障。因此,拦截对处理信息的请求并返回标识目标应用程序146的对象可以辅助目标应用程序146的预期执行。

目标应用程序146在客户端设备106中执行时,托管应用程序141的执行器153可以监视目标应用程序146的执行,并且可以确定目标应用程序146是否违反已经被分配给客户端设备106的任何合规规则。为了监视目标应用程序146的执行并强制执行(enforce)合规规则136,执行器153可以拦截从目标应用程序146发送的消息,并且可以解析消息以标识目标应用程序146是否正在试图执行违反合规规则136的动作。如果执行该动作的请求没有违反合规规则136,则执行器153可以将该请求转发到操作系统143。否则,如果执行动作的请求确实违反了合规规则136,则执行器可以丢弃该请求。以这种方式,执行器153可以防止目标应用程序146执行禁止的动作。

作为涉及android操作系统的示例,目标应用程序146可以发出具有作为调用参数的特定文件的标识符的java.io.file.delete调用。执行器153可以拦截该调用并确定目标应用程序146正试图删除所标识的文件。执行器153然后可以将所请求的动作与合规规则136进行比较,以确定目标应用程序146是否被允许删除该文件。如果执行器153确定目标应用程序146被允许删除该文件,则执行器153可以将java.io.file.delete调用转发到操作系统143,并且操作系统143可以删除所标识的文件。否则,如果执行器153确定目标应用程序146不被允许删除该文件,则执行器153可以向目标应用程序146返回“错误(false)”对象,其向目标应用程序146指示所请求的操作失败。以这种方式,如果目标应用程序146不被允许删除该文件,则执行器153可以阻止目标应用程序146删除文件。

在一些示例中,执行器153可以实现挂钩函数(hookingfunction)以拦截来自目标应用程序146的请求,并且可以强制执行合规规则136。对于涉及android操作系统的示例,如果目标应用程序146使用通过虚拟机执行的java字节码来请求执行动作,则执行器可以找到与该请求相对应的java方法对象,并将方法对象的访问标志从本地访问标志更改为非本地访问标志。此外,执行器153可以修改java方法的本地代码指针,使得该指针指向挂钩函数的地址。基于请求是否违反合规规则136,指针所指向的挂钩函数可以调用目标应用程序146请求的java方法或拒绝该请求。

如果目标应用程序146使用本地代码来请求执行动作,则执行器153可以通过修改可由本地代码调用的特定目标函数的地址来实现挂钩函数。这种目标函数的示例包括游戏引擎函数和仿真引擎函数。当加载器149将目标应用程序146的本地代码加载到存储器中时,执行器153可以定位本地代码的全局偏移表(got),其包括目标函数的地址列表。对于got中的每个目标函数,执行器153可以确定该函数是否遵从合规规则136。如果目标函数遵从合规规则136,则执行器153可以用挂钩函数替换目标函数,所述挂钩函数可允许或拒绝本地代码请求执行的动作。

在一些示例中,如果执行器153检测到目标应用程序146正在尝试执行违反合规规则136的动作,则执行器也可以发起动作。例如,执行器153可以向管理系统119发送消息,以向企业计算环境103的管理员通知目标应用程序146已经尝试执行违反合规规则136的动作。另外,执行器153可以在客户端设备106中生成消息,以向客户端设备106的用户通知目标应用程序146已经尝试执行违反合规规则136的动作。另外,执行器153可以执行保护动作,例如锁定客户端设备106或从客户端设备106擦除数据。此外,如果执行器153检测到目标应用程序146已经尝试执行违反合规规则136的动作,则执行器153可以使目标应用程序146遵从附加的合规规则136。

参考图4,示出了客户端设备106的另一示例,本文中称为客户端设备106a。图4所示的客户端设备106a可以包括操作系统143、工作空间管理器403和托管应用程序141的另一示例,本文中称为托管应用程序141a。

工作空间管理器403可以在客户端设备106中创建和管理工作空间。在一些示例中,工作空间可以被视为虚拟环境,在其中资源与其他工作空间隔离。例如,工作空间管理器403可以创建和管理企业工作空间,在其中企业组件(诸如企业数据和应用程序)与由操作系统143的沙盒组件(sandboxcomponent)创建和管理的个人工作空间隔离地操作。如下面将进一步详细描述的,工作空间管理器403可以在工作空间管理器403创建的工作空间中监视和管理组件(诸如应用程序)。

托管应用程序141a可以包括类似于托管应用程序141的组件。例如,托管应用程序141a可以包括加载器149、执行器153和目标应用程序146。此外,托管应用程序141a可以包括翻译器406。如下面将进一步详细描述的,翻译器406可以拦截和修改来自和去往目标应用程序146的消息。另外,翻译器406可以与工作空间管理器403通信。

接下来,提供工作空间管理器403和翻译器406的操作的示例。以下描述假设工作空间管理器403和托管应用程序141a已经被安装并且正在客户端设备106a中执行。

在一些示例中,工作空间管理器403和翻译器406可以辅助正在客户端设备106a中执行的目标应用程序146的多个实例。例如,目标应用程序146的第一实例可以在由操作系统143的沙盒组件管理的个人工作空间中执行,并且目标应用程序146的第二实例可以在托管应用程序141a的管理下在由工作空间管理器403控制的企业工作空间中执行。为此,当托管应用程序包生成器123针对托管应用程序141a创建托管应用程序包126b时,托管应用程序包生成器123可以修改托管应用程序清单文件309中的一些目标应用程序清单数据336。特别地,托管应用程序包生成器123可以重新命名托管应用程序清单文件309中的元素和属性,其与包名称、内容提供器的权限、由目标应用程序146定义的安全许可、账户类型以及非系统意图动作相关联。账户类型可以是账户的类别,其可以表示网络服务的用户。非系统意图动作可以是从不是操作系统组件的组件请求动作的传送消息对象。

当托管应用程序141a在客户端设备106中执行并使得目标应用程序146使用上述方法中的一种或多种在企业工作空间中执行时,翻译器406可以拦截目标应用程序146和操作系统143组件之间的消息。例如,翻译器可以拦截另一应用程序已经通过操作系统143的进程间通信服务发送到目标应用程序146的消息。作为另一示例,翻译器可以拦截来自目标应用程序146的执行动作请求。

当翻译器406拦截目标应用程序146和操作系统143的组件之间的消息时,翻译器406可以修改包名称、内容提供器的权限、由目标应用程序146定义的安全许可、账户类型以及非系统意图动作的消息中的对象标识符。在各种示例中,翻译器406可以通过向标识符添加字符串或通过从标识符中移除字符串来修改这些元素的标识符。例如,如果目标应用程序146拦截由目标应用程序146发送的包含标识符“x”的消息,则翻译器406可以将字符串“com.enterprise.workspace.app.”连结到消息中的“x”标识符,使得提供给操作系统143的消息的结果标识符是“com.enterprise.workspace.app.x”。作为另一示例,如果目标应用程序146拦截由操作系统143的组件发送的消息,其包括标识符“com.enterprise.workspace.app.x”,则翻译器406可以从标识符中移除字符串“com.enterprise.workspace.app”,以便提供给目标应用程序146的消息的结果标识符为“x”。通过翻译器406将操作系统143和目标应用程序146之间的消息中的标识符进行重命名,目标应用程序146的一个实例可以在托管应用程序141a的管理下执行,同时目标应用程序146的另一个实例在客户端设备106中执行。

在一些示例中,操作系统143可以提供沙盒功能,使得一个应用程序不能访问另一应用程序的专用存储中的数据。对于涉及android操作系统的示例,沙盒可以隔离应用程序之间的数据。这种沙盒功能可以防止客户端设备106的个人工作空间中的组件访问在由工作空间管理器403控制的企业工作空间中操作的目标应用程序146的数据。

在涉及android操作系统的一些示例中,操作系统143可以不限制个人工作空间中的组件访问存储在客户端设备106的可移除存储中的目标应用程序146的数据,诸如存储在安全数字(sd)存储卡中的数据。因为这些示例中的操作系统143不限制该访问,所以翻译器406可以加密和解密存储在可移除存储中的数据,使得个人工作空间中的组件不能处理可移除存储中的目标应用程序146的数据。例如,翻译器406可以拦截来自目标应用程序146的请求,以将文件存储在客户端设备106的sd存储卡中。在拦截该请求时,翻译器406可以对该文件进行加密,然后发送请求以将加密文件存储在sd存储卡中。通过将文件的加密版本存储在可移除存储中,客户端设备106的个人工作空间中的组件不能处理文件中的内容。

翻译器406还可以拦截来自目标应用程序146的对存储在客户端设备106的sd存储卡中的文件的请求。如果文件被翻译器406加密并存储,则翻译器可以获得加密的文件然后解密该文件。然后翻译器406可以将解密的文件提供给目标应用程序146。通过拦截这些请求并加密和解密可移除存储的文件,翻译器406可以辅助目标应用程序146处理文件,同时防止客户端设备106的个人工作空间中的组件处理该文件。

在一些示例中,操作系统143可以辅助客户端设备106中的一个应用程序与另一个应用程序中的组件通信和交互。对于涉及android操作系统的示例,操作系统143可以包括活动管理器,其辅助应用程序调用另一应用程序中的组件,诸如活动、服务、广播接收器或内容提供器。如果应用程序发送调用目标应用程序146中的组件的消息,则翻译器406可以拦截组件调用消息并将消息转发到工作空间管理器403。然后,工作空间管理器403可以确定企业工作空间中的应用程序是否源于组件调用消息。如果企业工作空间中的应用程序源于该消息,则工作空间管理器403可以指示翻译器406将消息转发到目标应用程序146。否则,如果个人工作空间中的应用程序源于该消息,则工作空间管理器403可以指示翻译器406丢弃该消息,使得目标应用程序146不接收该消息。以这种方式,翻译器406和工作空间管理器403可以防止企业工作空间之外的组件与企业工作空间中的组件进行交互或控制企业工作空间中的组件。

在一些示例中,工作空间管理器403可以提供剪贴板组件,其可以辅助在由工作空间管理器403管理的企业工作空间中的应用程序内的或其之间的剪切、复制和粘贴操作。为了实现这种剪贴板操作,翻译器406可以拦截与目标应用程序146相关联的剪贴板消息,并将消息转发到工作空间管理器403。然后工作空间管理器403可以确定目标应用程序146是否已请求执行剪切、复制或粘贴命令。如果目标应用程序146已经请求执行剪切命令,则可以从目标应用程序146中移除用户已经选择的内容,并将其存储在工作空间管理器403的剪贴板组件中以供以后使用。如果目标应用程序146已经请求执行复制命令,则可以从目标应用程序146复制用户已经选择的内容并将其存储在工作空间管理器403的剪贴板组件中以供以后使用。已经被剪切或复制的数据还可以被加密,以进一步限制仅对企业应用程序的访问。如果目标应用程序146已经请求执行粘贴命令,则剪贴板组件可以可选地将先前存储在剪贴板组件中的内容解密并提供给目标应用程序146,其可以将内容插入到用户选择的位置处。由于工作空间管理器403中的剪贴板组件处理剪贴板操作请求,所以目标应用程序146不能将内容从企业工作空间复制到私有工作空间中的组件。此外,工作空间管理器403防止企业工作空间中的组件获得和复制源自私有工作空间的内容。

在一些示例中,工作空间管理器403可以提供搜索管理器,其处理由目标应用程序146请求的搜索。例如,目标应用程序146可以请求与特定搜索查询匹配的搜索结果列表。为了实现该功能,翻译器406可以拦截来自目标应用程序146的请求执行搜索的消息。翻译器406可以将该请求转发到工作空间管理器403中的搜索管理器,并且搜索管理器可以基于搜索查询生成搜索结果。搜索管理器执行的搜索可以限于搜索企业工作空间内的资源。搜索管理器可以生成搜索结果,然后将搜索结果提供给目标应用程序146。通过拦截来自目标应用程序146的搜索请求并使工作空间管理器403中的搜索管理器处理搜索,搜索组件可以仅提供企业工作空间内的资源到目标应用程序146。虽然已经给出了限制数据使用和操作的几个示例,但工作空间管理器403还可以分离和限制个人和企业工作空间之间的其他设备行为。

参考图5,示出了提供托管应用程序包生成器123的操作的一部分的示例的流程图。特别地,图5提供了托管应用程序包生成器123的示例,其获得目标应用程序包126a并针对托管应用程序141生成托管应用程序包126b。此外,图5的流程图可以视为描绘在企业计算环境103的计算设备中实现的方法的步骤的示例。

从步骤503开始,托管应用程序包生成器123可以为托管应用程序包126b创建托管应用程序可执行文件303。在一些示例中,托管应用程序可执行文件303可以是包括java字节码以及本地代码的“二进制”文件。托管应用程序可执行文件303可以包括加载器可执行文件313和执行器可执行文件316。

在步骤506,托管应用程序包生成器123可以获得目标应用程序包126a。在一个示例中,托管应用程序包生成器123可以从应用程序库139获得目标应用程序包126a。如上所讨论的,目标应用程序包126a可以包括目标应用程序资源文件206,其可以包括目标应用程序的公共资源。在步骤509,托管应用程序包生成器123可以从目标应用程序包126a提取公共资源。

然后托管应用程序包生成器123可以移动到步骤513并且生成用于托管应用程序包126b的托管应用程序资源文件306。例如,托管应用程序资源文件306可以包括分别用于执行加载器149和执行器153的加载器资源319和执行器资源323。此外,托管应用程序资源文件306可以包括目标应用程序公共资源326,其可以包括从目标应用程序资源文件206提取的公共资源。例如,托管应用程序生成器123可以包括用于托管应用程序资源文件306中的目标应用程序146的启动器图标。

在步骤516,托管应用程序包生成器123可以从目标应用程序包126a中的目标应用程序清单文件290提取目标应用程序清单数据336。在步骤519中,然后托管应用程序包生成器123可以生成托管应用程序清单文件309。对于涉及android操作系统的示例,托管应用程序清单文件309可以是androidmanifest.xml文件。托管应用程序清单文件309可以包括从目标应用程序包126a提取的目标应用程序清单数据336、加载器清单数据329和执行器清单数据333。

如步骤523所示,托管应用程序包生成器123可以在托管应用程序清单文件309中定义启动器组件,其加载加载器149和执行器153。如上所讨论的,启动器组件可以是托管应用程序141的第一组件,其当托管应用程序141开始执行时被执行。对于涉及android操作系统的示例,在android中可以在androidmanifest.xml文件中将启动器组件定义为android.app.application类别的子类别:<application>标签的名称属性。

然后,托管应用程序包生成器123可以移动到步骤526,并将托管应用程序可执行文件303、托管应用程序资源文件306和托管应用程序清单文件309打包到托管应用程序包126b中。对于涉及android操作系统的示例,托管应用程序包126b可以是apk文件。在托管应用程序包生成器123生成托管应用程序包126b之后,过程结束。如上所述,然后管理系统119可以将生成的托管应用程序包126b提供给客户端设备106。

参考图6,示出了提供托管应用程序141的操作的一部分的示例的流程图。特别地,图6提供了托管应用程序141执行目标应用程序146并使得目标应用程序146在客户端设备106中执行的示例。此外,图6的流程图可以被视为描绘在客户端设备106中实现的方法的步骤的示例。

从步骤603开始,托管应用程序141可以执行启动器组件,其加载执行器153和加载器149。对于涉及android操作系统的示例,启动器组件可以包括android.app.application类别的子类别,其定义在android中的androidmanifest.xml文件中的<application>标签的名称属性中。当托管应用程序141在客户端设备106中开始执行时,该子类别可以是托管应用程序141实例化的第一组件。

如步骤606所示,托管应用程序141可以将执行器可执行文件316和加载器可执行文件313加载到客户端设备106中的存储器中。然后,托管应用程序141可以移动到步骤609并从目标应用程序可执行文件203加载目标应用程序146的可执行文件。对于涉及android操作系统的示例,托管应用程序141可以通过创建类加载器对象(诸如全局java.lang.classloader对象)来加载目标应用程序146的可执行文件,其通过dalvik.system.dexclassloader类加载器加载目标应用程序可执行文件203中的可执行文件。

当目标应用程序146的可执行文件已经被加载到客户端设备106的存储器中时,目标应用程序146可以请求访问目标应用程序资源文件206中的私有资源。然而,目标应用程序141可能没有指定私有资源存储位置的信息。因此,在步骤613,托管应用程序141可以拦截对私有目标应用程序资源的这些请求,并向目标应用程序146返回到目标应用程序包126a的存储位置的路径。对于涉及android操作系统的示例,到存储位置的路径可以包括客户端设备106的“/data/app/”目录。

当目标应用程序146正在执行时,目标应用程序146可以请求它本身的过程信息。对于涉及android操作系统的示例,目标应用程序146可以发出android.app.activity.getapplication、android.app.service.getapplication或android.app.conteximpl.getapplicationcontext调用。如步骤616所示,托管应用程序141可以拦截对过程信息的请求并返回标识目标应用程序146的对象。此后,该过程结束。

参考图7,其示出了提供执行器153的操作的一部分的示例的流程图。特别地,图7提供了执行器153拦截目标应用程序146执行动作的请求并且基于指派给客户端设备106的合规规则136确定是否允许所请求的动作的示例。此外,图7的流程图可以被视为描绘在客户端设备106中实现的方法的步骤的示例。

从步骤703开始,执行器153可以拦截目标应用程序146执行动作的请求。作为涉及android操作系统的示例,执行器153可以拦截目标应用程序146已发出请求删除客户端设备106中的特定文件的java.io.file.delete调用。在步骤706,执行器153可以标识目标应用程序146请求执行的动作。例如,如果执行器153已拦截了java.io.file.delete调用,则执行器153可以检测到该调用正在请求删除文件。此外,执行器153可以解析调用消息以提取该调用中的参数,其标识目标应用程序146正在请求删除的特定文件。

如步骤709所示,然后执行器153可以将该请求与指派给客户端设备106的合规规则136进行比较。在一些示例中,合规规则136可以指定客户端设备106中的组件是否被禁止执行一个或更多个动作。例如,合规规则136可以指定客户端设备106中的组件是否被允许请求访问客户端设备106中的图像库。如步骤713所示,然后执行器153可以确定目标应用程序146是否被允许执行已标识的动作。

如果执行器153确定目标应用程序146不被允许执行该动作,则执行器153可以丢弃该请求,如步骤716所示。在涉及android操作系统的示例中,执行器153可以通过向目标应用程序146返回“错误”对象而丢弃该请求,所述“错误”对象向目标应用程序146指示所请求的动作已经失败。

否则,如果执行器153确定目标应用程序146被允许执行该请求,则执行器153可以将该执行该操作的请求转发到操作系统143,如步骤719所示。因此,通过丢弃或转发该请求,执行器153可以确保目标应用程序按照指派给客户端设备106的合规规则136进行操作。在步骤719之后,该过程结束。

参考图8,其示出了提供翻译器406的操作的一部分的示例的流程图。特别地,图8提供了翻译器拦截目标应用程序146和操作系统143之间消息的示例,以及翻译器406转发拦截的消息或被拦截消息的修改版本的示例。另外,图8的流程图可以被视为描绘在客户端设备106a中实现的方法的步骤的示例。

从步骤803开始,翻译器406可以拦截目标应用程序146和操作系统143之间的消息。在一个示例中,目标应用程序146可以发送翻译器406拦截的消息。在另一示例中,操作系统143可以发送翻译器406拦截的消息。

在步骤806,翻译器406可以确定所拦截的消息是否是翻译器406应当修改的消息。翻译器406应该修改的消息的示例包括消息,其包括包名称、内容提供器的权限、由目标应用程序146定义的安全许可、账户类型以及非系统意图动作。如果翻译器406确定拦截的消息是翻译器406不应该修改的消息,则翻译器406可以将拦截的消息转发到原始预期的目的地,如步骤809所示。例如,如果目标应用程序146发送拦截的消息,则翻译器406可以将消息转发到操作系统143。如果操作系统143发送拦截的消息,则翻译器406可以将消息转发到目标应用程序146。在步骤809之后,该过程结束。

在步骤806,如果翻译器406确定拦截的消息是应该被修改的消息,则翻译器406可以移动到步骤813并修改消息。特别地,翻译器406可以修改消息中的对象标识符。例如,如果目标应用程序146拦截由目标应用程序146发送的包括对象标识符“x”的消息,则翻译器406可以将字符串“com.enterprise.workspace.app.”连结到消息中的“x”标识符,使得提供给操作系统143的消息的结果对象标识符为“com.enterprise.workspace.app.x”。作为另一示例,如果目标应用程序146拦截由操作系统143的组件发送的包括对象标识符“com.enterprise.workspace.app.x”的消息,则翻译器406可以从标识符中移除字符串“com.enterprise.workspace.app”,使得提供给目标应用程序146的消息的结果对象标识符为“x”。

如步骤816所示,然后翻译器406可以将修改的消息转发到原始意图的目的地。例如,如果目标应用程序146发送拦截的消息,则翻译器406可以将修改的消息转发到操作系统143。如果操作系统143发送拦截的消息,则翻译器406可以将消息转发到目标应用程序146。在步骤816之后,该过程结束。

参考图9,其示出了提供翻译器406的操作的一部分的另一示例的流程图。特别地,图9提供了翻译器406处理调用目标应用程序146中组件的消息的示例。此外,图9的流程图可以被视为描绘在客户端设备106a中实现的方法的步骤的示例。

从步骤903开始,翻译器406可以拦截来自操作系统143的消息,其调用目标应用程序146中的组件。作为涉及android操作系统的示例,该消息可以调用目标应用程序146的活动、服务、广播接收器或内容提供器。

如步骤906所示,翻译器406可将拦截的消息转发到客户端设备106a中的工作空间管理器403。然后翻译器406可以移动到步骤909并且从工作空间管理器403获得指令。由翻译器406接收的指令可以指定翻译器406是否应当丢弃所拦截的消息或将所拦截的消息转发到目标应用程序146。

在步骤913,翻译器406可以确定所接收的指令是否指定翻译器406应该丢弃拦截的消息。如果指令指定翻译器406应该丢弃所拦截的消息,则翻译器406可以移动到步骤916并丢弃该消息。否则,如果来自工作空间管理器403的指令指定翻译器406不应丢弃该消息,则翻译器406可以在步骤916将拦截的消息转发到目标应用程序146。在步骤916之后,过程结束。

参考图10,示出了提供工作空间管理器403的操作的一部分的示例的流程图。特别地,图10提供了工作空间管理器403指示翻译器406是否丢弃调用目标应用程序146中的组件的消息的示例。此外,图10的流程图可以被视为描绘在客户端设备106a中实现的方法的步骤的示例。

从步骤1003开始,工作空间管理器403可以从翻译器406获得消息。该消息可以是翻译器406在图9中的步骤906处被提供的消息。在步骤1006,工作空间管理器403确定该消息是否源自工作空间管理器403所管理的工作空间以外的工作空间。如果消息不是源自其他工作空间,则工作空间管理器403可以移动到步骤1009并指示翻译器将消息转发到目标应用程序146。

否则,如果消息确实源自其他工作空间,则工作空间管理器403移动到步骤1013并且确定该消息是否被配置为调用目标应用程序146中的组件。如果该消息未被配置为调用目标应用程序146中的组件,则工作空间管理器403可以指示翻译器406将消息转发到目标应用程序146,如步骤1009所示。

如果消息被配置为调用目标应用程序146中的组件,则工作空间管理器403可以移动到步骤1016并且指示翻译器406丢弃该消息。以这种方式,工作空间管理器403可以防止由工作空间管理器403管理的工作空间之外的组件与目标应用程序146进行交互或控制目标应用程序146。在步骤1009或步骤1016之后,过程结束。

参考图11,示出了提供翻译器406的操作的一部分的另一示例的流程图。特别地,图11提供了翻译器406加密存储在可移除存储中的数据并解密从可移除存储中检索的数据的示例。另外,图11的流程图可以被视为描绘在客户端设备106a中实现的方法的步骤的示例。

从步骤1103开始,翻译器406可以拦截来自目标应用程序146的访问客户端设备106a中的可移除存储的请求。在一个示例中,可移除存储可以包括sd存储卡。在步骤1106中,翻译器406可以确定被拦截的请求是否是将数据存储在可移除存储中的请求。

如果翻译器406确定被拦截的请求是将数据存储在可移除存储中的请求,则翻译器406可以移动到步骤1109并加密目标应用程序146已经请求存储的数据。如步骤1113所示,然后翻译器406可以将加密的数据存储在可移除存储器。在步骤1113之后,过程结束。

如果在步骤1106,翻译器406确定被拦截的请求不是存储数据的请求,则翻译器406可以移动到步骤1116并确定拦截的请求是否是从可移除存储中检索数据的请求。如果不是,则该过程在步骤1116之后结束。

否则,如果拦截的请求是来自目标应用程序146的从可移除存储中检索数据的请求,则翻译器406可以移动到步骤1119并从可移除存储中检索所请求的数据。翻译器406从可移除存储中检索的数据可以被加密,使得组件在没有解密密钥的情况下不能处理该数据。这样,如步骤1123所示,翻译器406可以解密所检索的数据。然后,翻译器409可以移动到步骤1126并将解密的数据提供给目标应用程序146。此后,过程结束。

参考图12,其示出了提供翻译器406的操作的一部分的另一示例的流程图。特别地,图12提供了翻译器406处理由目标应用程序146请求的剪贴板操作的示例。此外,图12的流程图可以被视为描绘在客户端设备106a中实现的方法的步骤的示例。

从步骤1203开始,翻译器406可以拦截从目标应用程序146发送的消息。在步骤1206,翻译器406可以确定消息是否是来自操作系统143中的剪贴板组件的对内容的请求。对于涉及android操作系统的示例,剪贴板组件可以包括android剪贴板管理器,并且对内容的请求可以是粘贴操作请求,其响应于用户发起粘贴操作而发布。

在步骤1206,如果翻译器406确定消息是对剪贴板内容的请求,则翻译器406可以移动到步骤1209并将该消息转发到工作空间管理器403。然后,翻译器406可以从工作空间管理器403的剪贴板组件获得剪贴板内容,如步骤1213所示。获得的剪贴板内容可以包括文本或图形内容。在步骤1216,然后翻译器406可以将在步骤1216获得的剪贴板内容提供给目标应用程序146。在步骤1216之后,过程结束。

在步骤1206,如果翻译器406确定在步骤1203拦截的消息不是对剪贴板内容的请求,则翻译器406可以移动到步骤1219并确定被拦截的消息是否是采用操作系统143中的剪贴板组件存储内容的请求。这样的请求可以包括剪切或复制操作请求,其响应于用户发起剪切或复制操作而发布。如果翻译器406确定拦截的消息不是采用操作系统143中的剪贴板组件存储内容的请求,则过程结束。

否则,如果翻译器406确定所拦截的消息是采用操作系统143中的剪贴板组件存储内容的请求,则翻译器406可以移动到步骤1223,并将拦截的消息转发到工作空间管理器403。通过转发所拦截的将剪贴板内容存储到工作空间管理器403而不是操作系统143的剪贴板组件的请求,工作空间管理器403可以存储剪贴板内容以供以后使用。

参考图13,其示出了提供工作空间管理器403的操作的一部分的示例的流程图。特别地,图14提供工作空间管理器403处理来自翻译器406的对剪贴板内容的请求的示例。另外,图13的流程图可以被视为描绘在客户端设备106a中实现的方法的步骤的示例。

从步骤1303开始,工作空间管理器403可以从翻译器406获得对剪贴板内容的请求。例如,翻译器406可以在图12的步骤1209中发送该请求。

如步骤1306所示,然后工作空间管理器403可以获得剪贴板内容,其先前由工作空间管理器403存储。然后,工作空间管理器403可以移动到步骤1309,并将剪贴板内容提供给托管应用程序141a中的翻译器406。在步骤1309之后,过程结束。

参考图14,其示出了提供工作空间管理器403的操作的一部分的另一示例的流程图。特别地,图14提供了工作空间管理器403处理来自翻译器406的存储剪贴板内容的请求的示例。另外,图14的流程图可以被视为描绘在客户端设备106a中实现的方法的步骤的示例。

从步骤1403开始,工作空间管理器403可以获得来自翻译器406的将内容存储在操作系统143的剪贴板组件中的请求。例如,翻译器406可以在图12的步骤1219中发送该请求。如步骤1406所示,然后工作空间管理器403可以获得翻译器406已请求存储的内容。在一些示例中,该内容被包括在请求存储内容的消息中。

然后,工作空间管理器403可以移动到步骤1409,并将该内容存储在工作空间管理器403的剪贴板组件中。通过工作空间管理器403将内容存储在工作空间管理器403的剪贴板组件中,工作空间中未由工作空间管理器403管理的应用程序不能访问存储的内容。在步骤1409之后,过程结束。

图5-14的流程图示出了实现本文描述的组件的功能和操作的示例。本文描述的联网的环境100的组件可以以硬件、软件或硬件和软件的组合来体现。如果以软件体现,则图5-14的流程图中的每个步骤可以表示模块或代码的一部分,其包括实现指定的逻辑功能的计算机指令。计算机指令可以以源代码的形式来体现,其包含以编程语言或机器代码编写的人类可读语句,该编程语言或机器代码包括可由合适的执行系统(诸如计算机系统或其他系统中的处理器)识别的机器指令。如果以硬件体现,则每个步骤可以表示实现指定逻辑功能的电路或多个互连电路。

虽然流程图示出了特定的执行顺序,但是应当理解,执行顺序可以不同于所示的顺序。例如,可以相对于所示的顺序来交换执行两个或更多个步骤的执行顺序。而且,连续示出的两个或更多个步骤可以同时或部分同时执行。此外,在一些示例中,可以跳过或省略流程图中所示的一个或更多个步骤。此外,为了增强实用、会计、性能测量或故障排除的目的,可以将任何数量的计数器、状态变量、警告信号量或消息添加到本文所述的逻辑流程中。所有这些变化都在本公开的范围内。

企业计算环境103、客户端设备106、客户端设备106a以及本文描述的其他组件可以各自包括至少一个处理电路。这样的处理电路可以包括一个或更多个处理器以及耦合到本地接口的一个或更多个存储设备。本地接口可以包括具有伴随地址/控制总线的数据总线。

用于处理电路的存储设备可以存储数据和组件,其可由处理电路的一个或更多个处理器执行。在一些示例中,管理系统119、托管应用程序141、托管应用程序141a和工作空间管理器403可被存储在一个或更多个存储设备中并且可由一个或更多个处理器执行。此外,数据存储116可以位于一个或更多个存储设备中。

管理系统119、托管应用程序141、托管应用程序141a、工作空间管理器403以及本文所描述的其他组件可以具体化在硬件中、具体化为可由硬件执行的软件组件或具体化为软件和硬件的组合。如果具体化为硬件,则本文描述的组件可以被实现为采用任何合适的硬件技术的电路或状态机。这种硬件技术包括例如一个或更多个微处理器、用于在应用一个或更多个数据信号时实现各种逻辑功能的具有逻辑门的离散逻辑电路、具有适当逻辑门的专用集成电路(asic)或可编程逻辑器件,诸如现场可编程门阵列(fpga)和复杂可编程逻辑器件(cpld)。

此外,本文所描述的包括软件或计算机指令的组件中的一个或更多个或多个可以具体化在任何非暂时性计算机可读介质中,用于由指令执行系统使用或与指令执行系统结合使用,诸如,例如,计算机系统或其他系统中的处理器。这样的计算机可读介质可以包含、存储和维护由指令执行系统使用或与指令执行系统结合使用的软件或计算机指令。

计算机可读介质可以包括物理介质,诸如磁、光、半导体或其他合适的介质。合适的计算机可读介质的示例包括固态驱动器、磁盘驱动器、闪存和存储盘,诸如光盘(cd)。此外,本文描述的任何逻辑或组件可以以多种方式来实现和构造。例如,所描述的一个或更多个组件可以被实现为单个应用程序的模块或组件。此外,本文描述的一个或更多个组件可以在一个计算设备中或通过使用多个计算设备来执行。

上述示例仅仅是为了清楚地理解本公开的原理而提出的实现方式的示例。在本质上不脱离本公开的精神和原理的情况下,可以对上述示例进行许多变化和修改。所有这些修改和变化旨在被包括在本公开的范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1