隔离、管理用户界面元素以及与之通信 背景
在现代软件开发中,编写了许多应用程序来在例如
.NET框架等托管运行时环境中执行。托管运行时环境用作允许应用程序访问系统资源、实施安全策略等等的方式。托管运行时环境通过创建其中执行应用程序的“分区进程空间”来实现这一点。分区进程空间允许应用程序以使该应用程序与在那时计算机可能正在执行的进程中的任何其它分区空间隔离的方式来执行。在
.NET框架中,这些分区进程空间称为“应用程序域(AppDomain)”。
当在一个分区进程空间中执行应用程序而需要在另一个分区进程空间中执行内容时,问题产生。给定隔离和其它支配早先讨论的托管运行时环境的规则,该应用程序将不能与不同分区进程空间中的内容通信,内容也将不能作为该应用程序的一部分被显示。
概述
公开了允许托管运行时环境中的用户界面显示来自两个或更多不同分区进程空间的内容的各种技术和方法。提供在托管运行时环境中操作的特定软件应用程序,该特定软件应用程序具有用户界面。使用窗口句柄来允许该特定软件应用程序的用户界面同时显示来自两个或更多不同分区进程空间的内容。在保持两个或更多不同分区进程空间之间的隔离级别的同时,可以将来自两个或更多分区进程空间的信息集成在该软件应用程序的用户界面中。这可以通过向用户界面的内容容器的第一部分提供主控件来实现,该主控件将包含提供的窗口作为子窗口并驻留在主窗口的第一分区进程空间中。向用户界面的内容容器的第二部分提供源控件,该源控件提供窗口句柄并驻留在主窗口的第二分区进程空间中。在一个实现中,内容容器的第二部分可以具有供例如在隔离框架控件中显示的内容。
提供本概述以便以简化形式介绍将在以下详细描述中进一步描述的一些概念。该概述不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。
附图简述
图1是一个实现的计算机系统的图示。
图2是在图1的计算机系统上操作的一个实现的托管软件应用程序的图示。
图3是示出图1的系统的一个实现所涉及的高级阶段的处理流程图。
图4是图1的系统的一个实现的处理流程图,其示出允许来自不同分区进程空间的内容被一起显示并互相通信时所涉及的阶段。
图5是图1的系统的高级阶段的一个实现的处理流程图,其示出允许来自不同分区进程空间的内容以不同安全级别一起显示时所涉及的阶段。
图6示出显示隔离框架控件中出现的外部内容的一个实现的逻辑图。
图7是示出使用窗口句柄来允许在相同用户界面中显示来自不同分区进程空间的内容的一个实现的逻辑图。
详细描述
为促进对本发明的原理的理解,现将对图中所示的各实施例加以参考,同时也将用具体语言描述它们。不过,需要理解的是,并无意由此作出范围上的限制。对所述实施例的任何改变和进一步更改,以及在此所述的原理的进一步应用都可以预期将是本领域技术人员通常能想到的。
该系统可以作为允许在托管环境中在同一用户界面中显示来自不同分区进程空间的内容的应用程序而在一般上下文中描述,但是该系统还用于除此之外的其它目的。在一个实现中,此处所描述的一个或多个技术可被实现为诸如
.NET框架等框架环境内的、或来自允许软件的执行和/或开发的任何其它类型的程序或服务的特征。
如图1所示,用于实现该系统的一个或多个部分的示例性计算机系统包括诸如计算设备100等计算设备。在其最基本的配置中,计算设备100通常包括至少一个处理单元102和存储器104。取决于计算设备的确切配置和类型,存储器104可以是易失性的(如RAM)、非易失性的(如ROM、闪存等)或是两者的某种组合。该最基本配置在图1中由虚线106来示出。
另外,设备100还可具有附加特征/功能。例如,设备100还可包含附加存储(可移动和/或不可移动),包括但不限于磁盘、光盘或磁带。这样的附加存储在图1中由可移动存储108和不可移动存储110示出。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息的任何方法或技术来实现的易失性和非易失性、可移动和不可移动介质。存储器104、可移动存储108和不可移动存储110都是计算机存储介质的示例。计算机存储介质包括但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CD‑ROM、数字多功能盘(DVD)或其它光存储、磁带盒、磁带、磁盘存储或其它磁存储设备、或者可用于存储所需信息并且可由设备100访问的任何其它介质。任何这样的计算机存储介质都可以是设备100的一部分。
计算设备100包括允许计算设备100与其它计算机/应用程序114进行通信的一个或多个通信连接115。设备100还可以具有诸如键盘、鼠标、笔、语音输入设备、触摸输入设备等输入设备112。还可以包括诸如显示器、扬声器、打印机等输出设备111。这些设备在本领域中公知且无需在此处详细讨论。在一实现中,计算设备100包括托管软件应用程序200。托管软件应用程序200将在图2中更详细地描述。
现在转向图2,并继续参考图1,示出了在计算设备100上操作的托管软件应用程序200。托管软件应用程序200是驻留在计算设备100上的应用程序之一。然而,可以理解,托管软件应用程序200可另选地或另外地被具体化为一个或多个计算机上的计算机可执行指令和/或与图1所示的不同的变型。另选地或另外地,托管软件应用程序200的一个或多个部分可以是系统存储器104的一部分、可以在其它计算机和/或应用程序115上、或可以是计算机软件领域的技术人员能想到的其它此类变型。
托管软件应用程序200包括程序逻辑204,其负责执行在此描述的一些或全部技术。程序逻辑204包括用于提供在托管运行时环境(.NET框架等)中操作并具有用户界面的特定软件应用程序的逻辑206;用于使用窗口句柄(例如,
Windows HWND句柄)来允许特定软件应用程序的用户界面同时显示来自两个或更多不同分区进程空间(例如,应用程序域)的内容的逻辑208;用于允许在保持两个或更多不同分区进程空间之间的隔离级别的同时将来自两个或更多分区进程空间的信息集成在于托管运行时环境中操作的软件应用程序的用户界面中的逻辑210;用于允许分区进程空间中的第一个通过执行按引用进程的编组(windows操作系统中的MarshalByRefObjects(按引用对象编组))来与分区进程空间中的第二个进行通信的逻辑212;用于允许分区进程空间中的第一个拥有内容容器的具有包含提供的窗口句柄的主控件的第一部分,而分区进程空间中的第二个拥有内容容器的具有提供窗口句柄的源控件的第二部分的逻辑214;用于允许内容容器的第一部分所遵循的第一安全级别与内容容器的第二部分(例如,该第二部分来自可信或不同的源等等)所遵循的第二安全级别不同的逻辑216;以及其它用于操作该应用程序的逻辑220。在一个实现中,程序逻辑204可用于通过编程,如使用对程序逻辑204中的过程的单一调用而从另一程序调用。
现在转向图3‑5,并继续参考图1‑2,更详细地描述了用于实现托管软件应用程序200的一个或多个实现的各阶段。图3是示出图1的系统的一个实现所涉及的高级阶段的处理流程图。在一种形式中,图3的过程至少部分地在计算设备100的操作逻辑中实现。该过程在起始点250处开始,在那里提供在托管运行时环境(例如,.NET框架等)中操作的特定软件应用程序,该特定软件应用程序具有用户界面(阶段252)。该用户界面的内容容器的第一部分拥有主控件,该主控件包含提供的窗口句柄(例如,
WindowsHWND句柄)并且驻留在主窗口的第一分区进程空间(例如,应用程序域等)中(阶段254)。向用户界面的内容容器的第二部分提供源控件,该源控件提供该窗口句柄并驻留在主窗口的第二分区进程空间中,该第二部分具有供显示的内容(阶段256)。在保持该内容容器的第一部分和第二部分之间的隔离级别的同时,可以将来自第一分区进程空间和第二分区进程空间的信息集成在该用户界面中(阶段258)。可以为第一和第二分区进程空间任选地提供/实施不同的安全级别(例如,诸如当一个空间来自不可信或未知源时,等等)(阶段260)。该过程在结束点262处结束。
图4是图1的系统的一个实现的处理流程图,其示出允许来自不同分区进程空间的内容被一起显示并互相通信时所涉及的阶段。在一种形式中,图4的过程至少部分地在计算设备100的操作逻辑中实现。该过程在起始点270处开始,在那里提供在托管.NET框架环境中操作的特定软件应用程序,该特定软件应用程序具有用户界面(阶段272)。向该用户界面的内容容器的第一部分提供主控件,该主控件包含
Windows HWND句柄并且驻留在主窗口的第一分区进程空间(例如,应用程序域等)中(阶段274)。向该用户界面的内容容器的第二部分提供源控件,该源控件提供
Windows HWND句柄并驻留在主窗口的第二分区进程空间中(阶段276)。在一个实现中,内容容器的第二部分具有供例如在隔离的框架控件中显示的内容(阶段276)。第一分区进程空间可以通过执行MarshalByRefObjects进程来与第二分区进程空间通信(阶段278)。该过程在结束点280处结束。
图5是图1的系统的高级阶段的一个实现的处理流程图,其示出允许来自不同分区进程空间的内容以不同的安全级别一起显示时所涉及的阶段。在一种形式中,图5的过程至少部分地在计算设备100的操作逻辑中实现。该过程在起始点290处开始,在那里提供在托管框架环境中操作的特定软件应用程序(阶段292)。该特定软件应用程序的用户界面可以通过使用
Windows HWND互操作来拥有来自多个应用程序域的内容区域(阶段294)。在维持隔离和应用程序域所提供的管理功能的同时,可将可视元素合并到同一用户界面中,同时使用按引用编组来允许应用程序域之间的双向通信(阶段296)。可任选地,例如软件开发者等用户可以声明要使用的安全级别和/或其它关于内容区域中的一个或多个的细节(例如以XAML文件、或以各种其它格式)(阶段298)。这允许按需以变化的安全授权级别来显示该内容区域(阶段298)。例如,可能需要取决于内容是来自可信还是不可信的源来改变安全级别,等等。该过程在结束点299处结束。
图6是示出隔离框架控件中出现的外部内容的一个实现的逻辑图。应用程序主窗口300是包含窗口内容305的某一图形应用程序。窗口内容305可以是向用户显示的任何种类的可视元素。应用程序主窗口300还包含隔离框架控件310。隔离框架控件310将包含内容320,其中内容320在整个应用程序的外部。隔离框架控件310对用户可以是不可见的。在一个实现中,使用此处讨论的某些或全部技术来允许将内容320(例如来自不可信的单独实体)显示在操作于与窗口内容305不同的分区空间中的隔离框架控件中。
图7是示出使用窗口句柄来允许在同一用户界面中显示来自不同分区进程空间的内容的一个实现的逻辑图。进程350将在托管运行时环境352中创建第一分区进程空间358。在分区进程空间358中,执行应用程序360。应用程序360包含其中存在句柄源366的隔离框架控件362。该隔离框架控件将加载内容364以使内容364对用户可见。内容364在应用程序360的外部,并且,由此,将要求进程350创建其中应执行内容364的第二分区进程空间356。在加载内容364时,它的一个组件,句柄宿主368将它自己作为窗口句柄370向句柄提供者354注册。然后句柄源366可以访问该窗口句柄370,并在应用程序360中包含的隔离框架控件362中显示内容364。
尽管用对结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述具体特征或动作。相反,上述具体特征和动作是作为实现权利要求的示例形式公开的。落入在此所述和/或所附权利要求所描述的实现的精神的范围内的所有等效方案、更改和修正都期望受到保护。
例如,计算机软件领域普通技术人员会认识到在此讨论的示例中所述的客户机和/或服务器布置、用户界面屏幕内容、和/或数据布局可在一台或多台计算机上不同地组织,以包括比示例中所描绘的更少或更多的选项或特征。