CN103443764A - 软件应用分配和发起系统 - Google Patents
软件应用分配和发起系统 Download PDFInfo
- Publication number
- CN103443764A CN103443764A CN2012800137111A CN201280013711A CN103443764A CN 103443764 A CN103443764 A CN 103443764A CN 2012800137111 A CN2012800137111 A CN 2012800137111A CN 201280013711 A CN201280013711 A CN 201280013711A CN 103443764 A CN103443764 A CN 103443764A
- Authority
- CN
- China
- Prior art keywords
- software
- executable code
- calculation element
- virtual memory
- executable
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44568—Immediately runnable code
- G06F9/44573—Execute-in-place [XIP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
- G06F9/44526—Plug-ins; Add-ons
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44568—Immediately runnable code
- G06F9/44584—Portable applications, i.e. making applications self-contained, e.g. U3 standard
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44594—Unloading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
- G06F9/4484—Executing subprograms
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Information Transfer Between Computers (AREA)
- Stored Programmes (AREA)
- Storage Device Security (AREA)
Abstract
一个实施例分配第一虚拟存储器;接收第一软件的可执行代码;将该第一软件的可执行代码直接写入该第一虚拟存储器;将该第一虚拟存储器标记为可执行的;直接从该第一虚拟存储器执行该第一软件的可执行代码;以及在该第一软件的可执行代码的协助下下载并执行第二软件的可执行代码。
Description
技术领域
本发明通常涉及通过计算机网络的计算机软件分配并且更具体地涉及通过计算机网络从服务器将计算机软件配置到客户端用于在该客户端上执行而不在该客户端上安装该软件的任何部分。
背景技术
计算机软件可以以各种方式分配给单独的计算机系统。例如,一件软件可以被存储在紧致盘(CD)或数字通用盘(DVD)上。个人可以将此类盘置入计算机系统的盘驱动器中以将存储在该盘上的该件软件安装在计算机系统上。最近,计算机网络为软件分配提供了另一种渠道。个人可以通过在其所拥有的计算机系统(例如,客户端)上的计算机网络(例如,因特网)从远程计算机系统(例如,服务器)下载软件。通常,通过网络下载的文件可以是安装套件,脚本,或嵌入软件的可执行文件。个人可以将下载文件保存在其计算机系统的硬盘驱动器上的永久位置或临时目录中,并且运行所保存的文件以将软件安装在其计算机系统上。
发明内容
本发明通常涉及通过计算机网络的计算机软件分配并且更具体地涉及通过计算机网络从服务器将计算机软件配置到客户端用于在该客户端上执行而不在该客户端上安装该软件的任何部分。
特定实施例分配第一虚拟存储器;接收第一软件的可执行代码;将该第一软件的可执行代码直接写入该第一虚拟存储器;将该第一虚拟存储器标记为可执行的;直接从该第一虚拟存储器执行该第一软件的可执行代码;以及在该第一软件的可执行代码的协助下下载并执行第二软件的可执行代码。
本发明的这些和其他特征、方面和优点将在下面结合附图的详细说明中被更加详细地描述。
附图说明
图1示出了从服务器将计算机软件配置到客户端用于在该客户端上执行而不在该客户端上安装软件的任何部分的示例方法。
图2示出了从服务器将计算机软件流到客户端用于在该客户端上执行的示例方法。
图3示出了示例网络环境。
图4示出了示例计算机系统。
具体实施方式
现参考附图中所阐明的本发明的几个实施例详细描述本发明。为了深入理解本发明,在以下描述中阐述了大量具体细节。然而,对于本领域技术人员显而易见的是,在缺少这些具体细节中的一些或全部的情况下也可实施本发明。在其它情况下,为了避免对本发明产生不必要的混淆,没有详细描述熟知的处理步骤和/或结构。另外,当结合特定实施例来描述本发明时,应当理解的是,这种描述并不意在将本发明限制到所描述的实施例。相反,这种描述意在覆盖替代选择、修改和在所附权利要求限定的本发明的精神和范围内所包括的等同物。
通过计算机网络(例如,因特网)可以将计算机软件从一个计算机系统(例如,服务器)分配给另一个计算机系统(例如,客户端)。事实上,越来越多的软件开发者、生产商和分销商认为计算机网络是用于软件分配的便捷、快速且划算的渠道。例如,个人经常能够从公司网站上下载该公司开发的计算机软件的最新版本。在典型场景中,个人可以在其计算机系统上执行的网页浏览器上加载含有软件下载链接的网页,然后点击在该网页中所提供的该下载链接。这通常导致文件被下载到个人计算机系统。该文件可以是安装脚本或可执行文件或软件本身的可执行代码。个人可以将该文件保存在其计算机系统的硬盘驱动器上。如果该文件是安装脚本或可执行文件,个人可以运行该被下载的文件以将软件安装在其计算机系统上。另一方面,如果该文件是软件的可执行代码,个人可以直接运行该软件(例如,通过双击该可执行文件)。
为执行程序不得不将通过计算机网络下载的软件程序保存或安装在计算机系统的硬盘驱动器上,这是不方便的或有时候是麻烦的。例如,第一,将所下载的文件保存到硬盘驱动器并且将软件安装在计算机系统上通常花费时间。另外,如果是大软件(例如,PDF),安装过程将花费大量时间。计算机系统的用户在其可以执行所下载的软件之前,不得不经历若干步骤(例如,安装、设置,等等)。第二,将文件保存在硬盘驱动器并且将软件安装在计算机系统上占用计算机系统的储存容量(例如,硬盘驱动器空间)。有时候,对于用户希望安装在计算机系统上的所有软件而言,计算机系统(例如,上网本或笔记本电脑)可能没有充足的储存空间。第三,软件开发者可能更新他们的软件并不时地发布软件的较新版本。软件的较新版本通常比较老版本具有更好的品质。因此,人们希望保持他们的软件是相对最新的。然而,为了更新软件,个人经常需要卸载当前安装在其计算机系统上软件的较老版本,然后再下载并安装较新版本。另外,一些软件开发者可能想要将基于软件的应用服务传递给用户,而该用户并不需要这类安装,因为它们想在初始使用或任何随后使用之后避免任何已下载的代码保留在永久数据储存装置上。
为了探讨这些问题中的一些问题,特定实施例能使一个计算机系统(例如,客户端)的用户通过计算机网络(例如,因特网)从另一个计算机系统(例如,服务器)下载计算机软件程序用于在该用户的计算机系统上执行而不在该用户的计算机系统的任何永久储存区(例如,硬盘驱动器)上存储或安装软件程序或任何其他类型的软件。换言之,用户可以将软件下载到其计算机系统上并且在其计算机系统上执行该软件。在完成该软件的执行之后(例如,在用户退出该软件后),在该用户的计算机系统上不会留下该软件或任何其他相关软件的任何踪迹。
为了澄清的目的,在下文中,将软件下载到其上并在其上执行该软件的计算机系统称为“客户端”,以及将从其上下载软件的计算机系统称为“服务器”。然而,本领域技术人员可以理解的是,以下所详细描述的实施例可以被合适地应用于任意两个计算机系统(例如,两台服务器,两个客户端,或一个服务器和一个客户端)。另外,从服务器下载到客户端并且在该客户端上执行的软件(即,个人想要使用的软件)称为目标软件。
在特定实施例中,另一件软件可以协助目标软件的下载和执行,在下文中称为“存根软件”或简称“存根”。在特定实施例中,存根可以通过使用任何合适的编程语言来实现并且被编译为计算机可执行代码。在特定实施例中,存根的可执行代码可以被存储在服务器上,并且可以通过使用以任何合适的编程语言编写的客户侧脚本(诸如,例如但不限于,可以在网页浏览器上执行的Java、JavaScript、Python,等等)被下载到客户端用于执行。例如,客户侧脚本可以包含在网页中作为可点击的链接。为了访问客户侧脚本,用户可以在驻存于客户端的网页浏览器中(例如,Microsoft Internet Explorer,Mozilla Firefox,或Google Chrome)加载包含客户侧脚本的网页,然后点击与网页中所提供的客户侧脚本的链接。这使得客户侧脚本代码被传送到网页浏览器用于网页浏览器执行。
图1阐明了通过使用存根将目标软件从服务器分配到客户端用于在该客户端上执行的示例方法。在特定实施例中,如步骤100所示,一旦客户侧脚本在网页浏览器中被执行,该脚本就访问驻存于该客户端的外来函数库。许多编程语言都提供外来函数界面。外来函数界面是一种机制,通过该机制,以一种编程语言编写的软件程序可以调用例程或使用以另一种编程语言(例如,由操作系统或软件库所提供的函数)编写的服务。典型地,实现编程语言的外来函数界面的函数包含在该编程语言所提供的外来函数库中。例如,Python提供被称为“ctypes包”的外来函数库;Java提供能使Java程序访问本地共享库的Java本地访问和Java本地界面;以及JavaScript提供JavaScript本地界面(JSNI),也称为JavaScript外来函数界面(JSFFI)。一些网页浏览器(例如,Mozilla Firefox)对于在这些网页浏览器中执行的代码还支持本地或外来函数访问。
取决于编写脚本代码的具体编程语言,脚本可以调用该编程语言的相关外来函数库。例如,对于Python来说,被称为“load_library”的函数可用于加载具体的库。Microsoft Windows提供用于将规定模块加载到调用进程地址空间的被称为“LoadLibrary”的函数。
在特定实施例中,如步骤102所示,通过合适的外来函数界面,脚本可以获取到驻存于客户端的存储分配函数的指针。在客户端上可用的具体的存储分配函数可取决于客户端上可用的软件库或客户端的操作系统。例如,Microsoft Windows具有用于在调用进程的虚拟地址空间中保留或提交网页区域的被称为“VirtualAlloc”的函数。C和C++编程语言都具有用于执行规定大小的动态存储分配的被称为“malloc”的库函数。
在特定实施例中,如步骤104所示,使用存储器分配函数(例如,“VirtualAlloc”),脚本可以分配规定数量的存储器。所分配的存储器对于存根的可执行代码应是充足的。在特定实施例中,如步骤106所示,可以将存根的可执行代码从服务器下载并写入到被分配的存储器。在特定实施例中,存根可能需要一些包含在各种共享库中的库函数。例如,对于Microsoft Windows而言,共享库被称为动态链接库(DLL)。通过使用合适的库加载函数(例如,“LoadLibrary”或“load_library”)可以加载含有存根所必需函数的共享库。
在特定实施例中,写入存根的可执行代码的存储器被标记为可执行的存储器。例如,Microsoft Windows提供一种被称为数据执行保护(DEP)的机制,其是在存储器上执行额外检测以协助防止恶意代码利用的一系列硬件和软件技术。简言之,在进程中的所有存储位置都被标记为不可执行直到该位置明确包含可执行代码。因此,为了执行存根代码,需要将存根的可执行代码所写入的存储位置标记为可执行的。对于Microsoft Windows而言,通过设置合适的标记或属性可以将具体的存储位置标记为可执行的(例如,将所分配的存储器标记为“PAGE_EXECUTE”,“PAGE_EXECUTE_READ”,“PAGE_EXECUTE_READWRITE”,或“PAGE_EXECUTE_WRITECOPY”)。
在特定实施例中,如步骤110所示,脚本可以获取到所分配的存储器中存根的可执行代码的指针。在特定实施例中,如步骤112所示,从存储器可以直接发起存根的可执行代码。在特定实施例中,如步骤114所示,存根可以协助客户端上目标软件的下载和执行。这个进程将在下面结合图2的更详细说明中被描述。
在特定实施例中,如步骤116所示,在存根完成其任务(即,协助客户端上目标软件的下载和执行)之后,脚本又通过合适的外来函数界面可以获取到驻存于客户端的存储器解除分配函数的指针。在客户端上可用的具体存储器解除分配函数可以取决于客户端上可用的软件库或客户端的操作系统。例如,Microsoft Windows提供用于释放、解除提交、或释放并解除提交调用进程虚拟地址空间内的网页区域的被称为“VirtualFree”的函数。C和C++编程语言都提供用于释放(即,解除分配)所分配的动态存储器的诸如“dealloc”和“free”的库函数。
在特定实施例中,如步骤118所示,使用存储器解除分配函数(例如,“VirtualFree”),脚本可以解除分配写入存根的可执行代码的存储器。随后,这个存储空间可以被用于其他目的以及其他数据可以被加载到同样的存储空间,覆盖存根的可执行代码。因此,在写入存根的可执行代码的存储位置被释放(即,解除分配)后,存根的可执行代码从客户端消失(例如,被替换或被移除)。由于存根未保存或安装在客户端的任何永久储存区(例如,硬盘驱动器),因此在客户端上不会留下存根的可执行代码的任何踪迹。
在特定实施例中,代替明确解除分配写入存根的可执行代码的存储位置,可以隐式释放存储位置。例如,如果用户退出网页浏览器或离开包含客户侧脚本的网页,与该脚本相关的所有存储位置都将被释放,这意味着写入存根的可执行代码的存储位置也被释放。
在特定实施例中,一旦在客户端上从所分配的存储器直接执行存根,存根就协助目标软件的下载和执行。在特定实施例中,存根可以在客户端和存储目标软件的服务器之间确立网络连接并通过该网络连接将该目标软件的可执行代码从该服务器下载到该客户端。在特定实施例中,目标软件的可执行代码可以嵌入到通过网络连接从服务器发送到客户端的数据流中。基于接收的数据流,存根可以提取目标软件的可执行代码并将其直接加载到客户端的随机访问存储器(RAM)用于在该客户端上执行。与存根一样,目标软件不会被保存或安装在客户端的任何永久储存区(例如,硬盘驱动器)。一旦目标软件完成其在客户端上的执行,加载目标软件的可执行代码的RAM空间将被释放并且该目标软件将不再存在于客户端上的任何地方。
在客户端上下载并发起目标软件而不在该客户端上保存或安装该目标软件,可以减少对该客户端储存容量的使用。另外,由于下载目标软件恰好是在其在客户端上执行之前,故在每次下载和发起目标软件时可以获取目标软件的最新或任何希望的版本。
图2阐明了用于存根以协助在客户端上下载和执行目标软件的示例方法。在特定实施例中,被下载的目标软件是应用程序。该目标软件的可执行代码可以存储在服务器上,该服务器可以是与存储存根的可执行代码的服务器相同的服务器或不同的服务器。
在特定实施例中,如步骤200所示,存根可以在客户端和存储目标软件的可执行代码的服务器之间确立网络连接。存根可以接管已经在服务器和客户端确立的现有的连接(例如,由网页浏览器确立的连接)或确立新的连接。如果存根确立新的网络连接,则可以采用耦连到计算机网络的两个计算机系统之间的任何合适的信号交换方法来确立新的连接。例如,在客户端上执行的存根可以将连接请求发送到服务器,并且服务器基于接收的连接请求可以发回响应,指示连接请求是否被接受或拒绝。如果服务器接收该连接请求,则在客户端和服务器之间相应地确立网络连接。在特定实施例中,在服务器和客户端之间的通信可以采用任何合适的通信协议,诸如,例如但不限于,超文本传输协议(HTTP),用户数据报协议(UDP),或传输控制协议(TCP)。
在特定实施例中,在服务器上可能存储有多个软件程序或在服务器上可能存储有特定软件程序的多个版本,该多个软件程序或特定软件程序的多个版本可以被下载到独立的客户端。在特定实施例中,通过存根在客户端上执行从服务器下载到客户端的每件软件的每个版本可以由唯一标识符来识别。这种唯一标识符可以被用于通知服务器客户端的存根希望下载哪件具体软件。在特定实施例中,每件可下载的软件可以被认为是一种网络资源。因此,一件可下载的特定软件可以通过其唯一网络路径或统一资源标识符(URI)来识别。存根可以利用目标软件的URI查阅该目标软件。
有时候,一件软件可能具有多个版本。在特定实施例中,存根可以为客户端确定目标软件的最合适的版本。例如,存在MicrosoftWindows操作系统的多个版本(例如,Windows XP、Windows ME或Windows7)以及32位操作系统和64位操作系统。存根可以检查客户端的操作系统以确定与客户端操作系统最兼容的具体的目标软件的版本。如果客户端的操作系统是32位操作系统,那么存根可以识别目标软件的32位版本。另一方面,如果客户端的操作系统是64位操作系统,那么存根可以识别目标软件的64位版本。
在特定实施例中,当请求与存储目标软件的特定服务器网络连接时,存根可以将该目标软件的唯一标识符作为连接请求的一部分或与连接请求一起发送到该服务器。可选择地,在特定实施例中,在服务器和客户端之间确立连接之后,存根可以将目标软件的标识符作为单独请求发送到服务器。服务器然后可以确定其应传输给请求客户端的哪件特定软件。这个进程类似于通过网页浏览器调用数据流(例如,通过点击网页中含有的可下载文件的URL或URI链接)。
在特定实施例中,如步骤202所示,通过网络连接,服务器可以将数据流传输到请求客户端,并更具体地,传输到请求客户端上执行的存根。网络连接可以是TCP连接,UDP连接,HTTP连接,或任何其他合适的连接。在特定实施例中,数据流可以是视频流或音频流。在特定实施例中,由存根所请求的目标软件的可执行代码被嵌入数据流中作为一个或多个数据包。例如,目标软件可以是视频解码器,该视频解码器接收由视频编解码器编码的视频流,对数据解码并将视频数据渲染在客户端的显示器上。作为另一个例子,目标软件可以是计算机游戏。
在特定实施例中,目标软件的可执行代码可以被嵌入数据流中。在特定实施例中,目标软件的可执行代码可以是机器代码或本地代码并且可以是平台相关的。在特定实施例中,目标软件的可执行代码被遵循以在请求目标软件的特定客户端的平台上运行(例如,基于客户端的硬件架构和操作系统)。
在特定实施例中,数据流可以包括两个部分。在特定实施例中,数据流的第一部分(即,数据流的开始端)可以包含目标软件的可执行代码。在特定实施例中,可以使用任何合适的压缩方法可选择地压缩目标软件的可执行代码。例如,诸如zip或gzip的无损压缩方法,可以被用于压缩目标软件的可执行代码。在特定实施例中,目标软件的可执行代码可以被嵌入到视频流中。由于大多数种类的视频流是通用容器格式,因此数据(更具体地说,目标软件的可执行代码)可以被嵌入到这样的视频流中。在特定实施例中,数据流的第一部分还可以包括操作变量和参数,诸如指示需要用于加载并执行软件的可执行代码的存储空间(例如,RAM存储空间)大小的参数。
在特定实施例中,数据流的第二部分可以选择性地包括在目标软件执行进程中由该目标软件所消费的附加数据。在特定实施例中,通过采用任何合适的编码或压缩方法,可以选择性地对附加数据进行编码或压缩并且作为一个或多个数据包传输。此外,如果数据流是视频流,则可以采用诸如MPEG编码的视频编码方法对附加数据编码。
在特定实施例中,基于接收的数据流,存根可以访问数据流的第一部分以提取嵌入其中的目标软件的可执行代码。如果需要,存根可以对所提取的目标软件的可执行代码解码或解压缩。存根所采用的解码或解压缩方法可以对应于用于对目标软件的可执行代码编码或压缩的编码或压缩方法。例如,如果采用合适的压缩算法(例如,无损压缩算法)来压缩目标软件的可执行代码,则存根可以采用相对应的解压缩算法对其解压缩。类似地,如果采用合适的编码算法对目标软件的可执行代码编码,则存根可以采用相对应的解码算法对其解码。另外,在特定实施例中,存根还可以访问数据流的第一部分以提取指示需要加载并执行目标软件的可执行代码的存储空间大小的参数。
在特定实施例中,如步骤204所示,为了防止在客户端上下载并执行未授权的或恶意的软件,存根可以采用任何合适的验证方法验证从数据流的第一部分所提取的目标软件的可执行代码。在特定实施例中,存根提供可信赖源(例如,可信赖服务器的域名或IP地址)的白名单。基于接收的软件,存根可以将传输该软件的源(例如,服务器或网站)与其白名单对比。仅由白名单上的可信赖源所传输的软件可以在客户端上执行。从不在白名单上的源接收的软件可以被放弃或隔离。在特定实施例中,在数据流的第一部分嵌入的目标软件的可执行代码可以被签名并与数字证书关联。存根可以采用其关联的数字证书验证目标软件的可执行代码。
如果目标软件的可执行代码不是有效的(步骤206,“否”),那么目标软件的可执行代码在客户端上不被发起并且可以被删除。另一方面,如果目标软件的可执行代码是有效的(步骤206,“是”),那么,在特定实施例中,如步骤208所示,存根可以在客户端上分配充足数量的存储器用于加载并执行目标软件的可执行代码。在特定实施例中,由在数据流的第一部分中所包含的变量指示,所分配的存储器的数量不少于加载和执行目标软件的可执行代码所需要的存储空间的大小。在特定实施例中,所分配的存储器可以是动态存储器,虚拟存储器,或客户端的RAM。
大多数操作系统提供能使应用程序分配和解除分配虚拟或动态存储器并且在运行时执行其他类存储器相关函数的库函数。在特定实施例中,通过合适的外来函数库,存根可以调用客户端操作系统所提供的合适的库函数用于为目标软件的可执行代码分配所需要的存储空间。例如,如上所述,“malloc”是C和C++编程语言中用于分配动态存储空间的标准库函数。对于Microsoft Windows而言,“VirtualAlloc”是用于在虚拟地址空间保留网页区域的Win32库函数。一旦分配了存储器,存根可以调用合适的库函数将所分配的存储器设置标记为“可执行”,向操作系统表明所分配的存储器中所存储的数据是可执行的代码。例如,对于Microsoft Windows而言,可以规定属性“PAGE_EXECUTE”,“PAGE_EXECUTE_READ”,“PAGE_EXECUTE_READWRITE”,或“PAGE_EXECUTE_WRITECOPY”与存储器分配(例如,使用“VirtualAlloc”)相关以向操作系统请求足够数量的有权执行代码并且有权可操作地读或写代码的虚拟存储器。
在特定实施例中,如步骤210所示,存根可以将目标软件的可执行代码直接加载到所分配的存储器(例如,所分配的动态存储器)而不在客户端的硬盘驱动器上保存或安装该目标软件的可执行代码。在特定实施例中,存根可以调用客户端操作系统或客户端上软件库所提供的合适的库函数以将表示目标软件的可执行代码的二进制数据直接拷贝到所分配的虚拟或动态存储空间。例如,对于MicrosoftWindows而言,“CopyMemory”是用于将存储块从一个位置拷贝到另一个位置的函数;以及“memcpy”是C和C++编程语言中用于将数据从一个存储位置拷贝到另一个存储位置的标准库函数。
在特定实施例中,目标软件可以需要某些库函数。如果所需要的库函数已经存在于客户端上,则存根可以为目标软件加载包含所需要的库函数的共享库。例如,对于Microsoft Windows而言,利用“LoadLibrary”函数可以加载共享库(例如,DLL)。另一方面,如果所需要的库函数不存在于客户端上,则存根可以从合适的服务器下载包含所需要的库函数的共享库或其自身所需的库函数,为共享库或所需的库函数分配虚拟存储器,并且将共享库或所需的库函数写入所分配的虚拟存储器以使当需要时目标软件可以使用该库函数。换言之,对于在目标软件执行的进程中所必需的资源(例如,库函数),如果资源已存在于客户端上,则采用客户端上的资源;并且如果资源不存在于客户端上,则存根为目标软件下载资源。
在特定实施例中,存根还可以调整转移表(也称为跳转表)以包括关于加载在所分配的存储器中目标软件的可执行代码的信息。这个进程可以称为“修正”进程。转移表是将程序控制从一个部分转移到程序的另一部分或从一个程序转移到另一个程序的有效方法。通过调整合适的转移表入口,操作系统可以获知当前加载于所分配的存储器中的软件的可执行代码。
在修正进程中所执行的实际步骤可以根据客户端的操作系统或平台变化。例如,对于Microsoft Windows平台而言,可执行的格式典型地具有重定位表和引入表。通常,假定可执行代码被加载到固定地址上,那么该可执行代码就被链接。为了将可执行代码加载到不同地址,任何由可执行代码所使用的绝对地址被寻找并且“修正”以满足在基址中的改变。这可以通过使用重定位表来获取。在特定实施例中,重定位表编辑可执行代码内所有绝对地址的列表以使得当加载可执行代码时它们能被修正。引入表列出了可执行代码可以调用的所有程序的实际地址。这可以包括API程序和在其他动态连接库(DLL)中的程序。用当前进程的地址空间内的程序的实际地址取代这些引入地址。引入表是可执行代码内这些地址的位置的列表(该地址可以是在跳转表或蹦床区内,还可以是用于间接调用的数据的列表)。
特定实施例可以利用可移植可执行(PE)格式,其是一种在Microsoft Windows操作系统中使用的用于可执行文件、目标代码和DLL的文件格式。PE格式在操作系统软件架构的许多环境中是通用的。通常,PE格式是一种封装Microsoft Windows操作系统载入程序所必需的信息以管理被包装的可执行代码的数据结构。特定实施例可以采用PE格式编辑并保存软件的可执行代码。对于其他平台,本发明的实施可以通过需要单个入口点的原可执行代码来操作而不用任何修正。在一些实施中,原可执行代码可以被配置以执行修正本身并且能覆盖如ELF和MACH-O的代码。
在特定实施例中,如步骤212所示,目标软件可以在客户端上执行。在特定实施例中,可以从存储目标软件的可执行代码的所分配的动态存储器直接发起该目标软件的可执行代码。在特定实施例中,存根可以使在所分配的存储器中加载的目标软件的可执行代码开始执行。因此,存根可以将执行转移到目标软件。
在特定实施例中,如步骤214所示,存根可以将套接字(或更确切地说,与在客户端和服务器之间的网络连接相关联的英特网套接字或网络套接字)和数据流传送到在客户端上执行的目标软件。网络套接字构建一种用于将输入数据包传送给合适的应用进程或线程的机制。通过将与数据流相关联的网络套接字传送到目标软件,目标软件可以立刻接收在数据流第二部分中的包含附加数据的附加数据包。目标软件然后可以消费(例如,处理)包含在数据流第二部分中的附加数据。在特定实施例中,存根可以调用由客户端操作系统所提供的合适的库函数以将网络套接字传送到正在执行的目标软件。例如,通过使用“WSADuplicateSocket”函数,Windows套接字应用程序界面(API),也称为Winsock,能使网络套接字被从一个进程传送到另一个进程。
该目标软件可以继续运行,直到其被完成。在特定实施例中,一旦目标软件已完成其执行(即,已退出),用于加载目标软件程序可执行代码的动态存储空间就可以被解除分配(例如,通过客户端的操作系统)。例如,对于Microsoft Windows来说,“VirtualFree”函数可以被调用以释放存储目标软件的可执行代码所分配的存储器。随后,这个存储空间可以被用于其他目的并且其他数据可以被加载到同样的存储空间,覆盖目标软件的可执行代码。这时候,因为目标软件通过存根直接安装到存储器而未存储在客户端上的任何持久介质中(在一些实施例中,包括浏览器缓存或其他临时数据存储机构等),所以目标软件不再存在于客户端上并未对客户端带来任何状态改变(例如,在驱动器上没有文件,没有系统注册表改变,等等)。
在一些实施例中,由存根发起的并在流中嵌入的第一可执行代码目标本身可以通过请求另一个还包括第二可执行代码目标的数据流使另一个进程生成。第二可执行代码目标可以作为第一可执行代码目标的子进程被发起并且共享由第一可执行代码目标生成的相同沙盒(sand-boxed)文件系统。例如,第一可执行代码目标可以是使一个或多个第二可执行代码目标在存储器中整体运行的虚拟机并且被第一虚拟机代码目标沙盒。在具体实施中,例如,虚拟机将由第二代码目标对数据储存子系统的写写入到存储器,而不是在用户注销客户端时所解析的外围装置。例如,由于第一可执行代码目标可以是沙盒要演示或测试的第二程序的虚拟机,故这个实施例可用于演示软件的版本。如上面所讨论的,当第一和第二可执行代码目标结束,它们在存储器中的所有踪迹将消失。前述实施例在应用执行中还能用于防止未经授权访问典型被缓冲的数据。
特定实施例可以在网络环境中实现。图3阐明了示例网络环境300。网络环境300包括将一个或多个服务器320和一个或多个客户端330彼此耦连在一起的网络310。在特定实施例中,网络310是内联网,外联网,虚拟私人网(VPN),局域网(LAN),无线局域网(WLAN),广域网(WAN),城域网(MAN),英特网的一部分,或其他网络310或两个或多个此类网络310的组合。本发明涵盖任何合适的网络310。
一个或多个链路350将服务器320或客户端330耦连到网络310。在特定实施例中,一个或多个链路350中的每一个都包括一个或多个有线的、无线的或光学的链路350。在特定实施例中,一个或多个链路350中的每一个都包括内联网,外联网,VPN,LAN,WLAN,WAN,MAN,英特网的一部分,或其他链路350或两个或多个此类链路350的组合。本发明涵盖将服务器320和客户端330耦连到网络310上的任何合适的链路350。
在特定实施例中,每一个服务器320可以是整体式服务器或是跨多计算机或计算机数据中心的分散式服务器。服务器320可以是各种类型的,诸如,例如但不限于,网络服务器,新闻服务器,邮件服务器,消息服务器,广告服务器,文件服务器,应用服务器,交互服务器,数据库服务器,或代理服务器。在特定实施例中,每个服务器320可以包括硬件,软件,或用于执行服务器320所支持或实现的合适功能的内嵌逻辑组件或两个或多个此类组件的组合。例如,网络服务器通常能够托管包含网页或网页具体元素的网站。更具体地,网络服务器可以托管HTML文件或其他文件类型,或可以基于请求动态创建或构成文件,并且响应于HTTP或其他来自客户端330的请求将它们传达给客户端330。邮件服务器通常能够将电子邮件服务提供给各种客户端330。数据库服务器通常能够提供用于管理存储在一个或多个数据存储中的数据的界面。
在特定实施例中,存根322的可执行代码和软件324的可执行代码可以驻存于服务器320。它们可以被下载到客户端330用于执行而不被保存或安装在客户端330上。当它们在客户端330上执行时,它们存在于客户端330的虚拟存储器上。在它们的执行被完成后,它们在释放虚拟存储器的时候被从客户端330移除,因而不会在客户端330上留下任何踪迹。
在特定实施例中,通过一个或多个链路350可以将一个或多个数据储存区340可通信地链接到一个或多个服务器320上。在特定实施例中,数据储存区340可以用于存储各种类型的信息。在特定实施例中,存储在数据储存区340中的信息可以根据具体的数据结构被组织。在特定实施例中,每个数据储存区340可以是一个相关的数据库。特定实施例可以提供能使服务器320或客户端330管理(例如,检索,修改,添加,或删除)存储在数据储存区340中信息的界面。
在特定实施例中,每个客户端330可以是包括硬件、软件或内嵌逻辑组件或者两个或多个此类组件的组合的电子装置,并能够执行由客户端330实施或支持的合适的功能。例如并且不限于,客户端330可以是台式计算机系统,笔记本计算机系统,上网本计算机系统,手持电子装置,或移动电话。本发明涵盖任何合适的客户端330。客户端330可以使在客户端330上的网络用户访问网络330。客户端330可以使其用户与其他客户端330上的其他用户通信。
客户端330可以具有网页浏览器332,诸如Microsoft InternetExplorer,Google Chrome或Mozilla Firefox,并且可以具有一个或多个附加组件,插件,或其他扩展件,诸如工具栏或Yahoo工具栏等。在客户端330上的用户可以进入统一资源定位器(URL)或其他将网页浏览器332指向服务器320的地址,并且网页浏览器332可以生成超文本传输协议(HTTP)请求并将HTTP请求传送到服务器320。服务器320可以接收HTTP请求并将响应于HTTP请求的一个或多个超文本标记语言(HTML)文件传送到客户端330。客户端330可以基于来自服务器320的HTML文件渲染网页以呈现给用户。本发明涵盖了任意合适的网页文件。例如并且不限于,从HTML文件,扩展超文本标识语言(XHTML)文件,或扩展标识语言(XML)文件,网页可以根据具体需要渲染。这类网页还可以执行脚本,诸如,例如但不限于,JavaScript,Java,Microsoft Silverlight,标记语言和脚本的组合(诸如AJAX(异步JavaScript和XML))等编写的脚本。在此,所提到的网页包含一个或多个相应的网页文件(其被浏览器用于渲染网页)并且在适当的地方反之亦然。
特定实施例可以在一个或多个计算机系统上实施。图4阐明了示例计算机系统400。在特定实施例中,一个或多个计算机系统400执行在此所描述或阐明的一个或多个方法中的一个或多个步骤。在特定实施例中,一个或多个计算机系统400提供在此所描述或阐明的功能。在特定实施例中,在一个或多个计算机系统400上运行的软件执行在此所描述或阐明的一个或多个方法中的一个或多个步骤或者提供在此所描述或阐明的功能。特定实施例包括一个或多个计算机系统400的一个或多个部分。
本发明涵盖任何合适数量的计算机系统400。本发明涵盖采用任何合适物理格式的计算机系统400。例如并且不限于,计算机系统400可以是嵌入式计算机系统,片上系统(SOC),单板计算机系统(SBC)(诸如,例如,计算机模块(COM)或系统模块(SOM)),台式计算机系统,膝上或笔记本计算机系统,交互式信息亭,大型计算机,计算机系统网,移动电话,个人数字助手(PDA),服务器,或这些中的两个或多个的组合。在适当的情况下,计算机系统400可以包括一个或多个计算机系统400;以整体式或分散式;跨多个地点;跨多个机构;或驻存于云端(其在一个或多网络中可以包括一个或多个云组件)。在适当的情况下,一个或多个计算机系统400可以在没有实质空间或临时限制的情形下执行在此所描述或阐明的一个或多个方法中的一个或多个步骤。例如并且不限于,一个或多个计算机系统400可以以实时或批处理方式执行在此所描述或阐明的一个或多个方法中的一个或多个步骤。在适当情况下,一个或多个计算机系统400可以在不同时间或不同地点执行在此所描述或阐明的一个或多个方法中的一个或多个步骤。
在特定实施例中,计算机系统400包括处理器402,存储器404,储存器406,输入/输出(I/O)界面408,通信界面410,和总线412。虽然本发明描述并阐明了在特定配置中的具有特定数量的特定组件的特定计算机系统,但本发明涵盖在任何合适配置中的具有任何合适数量的任何合适组件的任何合适的计算机系统。
在特定实施例中,处理器402包括用于执行诸如那些组成计算机程序的指令的硬件。例如并且不限于,为了执行指令,处理器402可以从内部寄存器、内部缓存、存储器404或储存器406检索(或读取)指令;解码并且执行它们;然后将一个或多个结果写入内部寄存器、内部缓存、存储器404或储存器406。在特定实施例中,处理器402可以包括一个或多个用于数据、指令或地址的内部缓存。在适当的情况下,本发明涵盖包括任何数量的任何合适的内部缓存的处理器402。例如并且不限于,处理器402包括一个或多个指令缓存,一个或多个数据缓存,和一个或多个转译后备缓冲器(TLB)。指令缓存中的指令可以是存储器404或储存器406中指令的拷贝,并且指令缓存可以加速处理器402对那些指令的检索。数据缓存中的数据可以是在存储器404或储存器406中用于在处理器402上执行的指令所处理的数据的拷贝;或者用于被处理器402上执行的随后指令访问的或用于写入存储器404或储存器406的在处理器402上执行的先前指令的结果;或者其他合适数据。数据缓存可以加速处理器402的读或写操作。TLBs可以加速处理器402的虚拟地址翻译。在特定实施例中,处理器402可以包括一个或多个用于数据、指令或地址的内部寄存器。在适当的情况下,本发明涵盖包括任意合适数量的任意合适的内部寄存器的处理器402。在适当的情况下,处理器402可以包括一个或多个算术逻辑单元(ALU);可以是多核处理器;或包括一个或多个处理器402。虽然本发明描述并阐明了特定处理器,但本发明涵盖任何合适的处理器。
在特定实施例中,存储器404包括用于存储处理器402所执行的指令或处理器402所处理的数据的主存储器。例如并且不限于,计算机系统400可以从储存器406或其他源(诸如,例如,另一个计算机系统400)将指令加载到存储器404。处理器402然后可以将指令从存储器404加载到内部寄存器或内部缓存。为了执行指令,处理器402可以从内部寄存器或内部缓存检索指令并对其解码。在执行指令的进程中或之后,处理器402可以将一个或多个结果(其可以是中间结果或最后结果)写入到内部寄存器或内部缓存。处理器402然后可以将那些结果中的一个或多个写到存储器404。在特定实施例中,处理器402仅仅执行在一个或多个内部寄存器或内部缓存或者在存储器404中(而不是储存器406或其他地方)的指令,并且仅仅处理在一个或多个内部寄存器或内部缓存或者在存储器404中(而不是储存器406或其他地方)的数据。一个或多个存储器总线(其每一个都包括地址总线和数据总线)可以将处理器402耦连到存储器404。如下所述,总线412可以包括一个或多个存储器总线。在特定实施例中,一个或多个存储器管理单元(MMU)驻存于处理器402和存储器404之间并且根据处理器402的请求协助访问存储器404。在特定实施例中,存储器404包括随机访问存储器(RAM)。在适当的情况下,这种RAM可以是易失性存储器。在适当的情况下,这种RAM可以是动态RAM(DRAM)或静态RAM(SRAM)。此外,在适当的情况下,这种RAM可以是单口的或多口的RAM。本发明涵盖任何合适的RAM。在适当的情况下,存储器404可以包括一个或多个存储器404。虽然本发明描述并阐明了特定存储器,但本发明涵盖任何合适的存储器。
在特定实施例中,储存器406包括用于数据或指令的大容量储存器。例如并且不限于,储存器406可以包括HDD,软盘驱动器,闪速存储器,光盘,磁光盘,磁带,或通用串行总线(USB)驱动器或这些中的两个或多个的组合。在适当的情况下,储存器406可以包括可移动的或不可移动的(或固定的)介质。在适当的情况下,储存器406可以置于计算机系统400的内部或外部。在特定实施例中,储存器406是非易失性的,固态的存储器。在特定实施例中,储存器406包括只读存储器(ROM)。在适当的情况下,这种ROM可以是掩膜编程的ROM,可编程ROM(PROM),可擦除PROM(EPROM),电可擦除PROM(EEPROM),电改写ROM(EAROM),或闪速存储器或这些中的两个或多个的组合。本发明涵盖采用任何合适的物理格式的大容量储存器406。在适当的情况下,储存器406可以包括一个或多个协助在处理器402和储存器406之间通信的储存控制单元。在适当的情况下,储存器406可以包括一个或多个储存器406。虽然本发明描述并阐明了特定储存器,但本发明涵盖任何合适的储存器。
在特定实施例中,I/O界面408包括硬件,软件,或提供用于在计算机系统400和一个或多个I/O装置之间通信的一个或多个界面的硬件和软件。在适当的情况下,计算机系统400可以包括一个或多个这样的I/O装置。一个或多个这样的I/O装置可以使在个人和计算机系统400之间能够通信。例如并且不限于,I/O装置可以包括键盘、按键、麦克风、监视器、鼠标、打印机、扫描仪、扬声器、静物照相机、手写笔、平板电脑、触摸屏、轨迹球、视频摄像机、其他合适的I/O装置或这些中的两个或多个的组合。I/O装置可以包括一个或多个传感器。本发明涵盖任何合适的I/O装置和用于它们的任何合适的I/O界面408。在适当的情况下,I/O界面408可以包括一个或多个装置或软件驱动器使处理器402能够驱动一个或多个这些I/O装置。在适当的情况下,I/O界面408可以包括一个或多个I/O界面408。虽然本发明描述并阐明了特定I/O界面,但本发明涵盖任何合适的I/O界面。
在特定实施例中,通信界面410包括硬件,软件,或提供用于在计算机系统400和一个或多个其他计算机系统400之间通信(诸如,例如,基于数据包的通信)的一个或多个界面或一个或多个网络的硬件和软件。例如并且不限于,通信界面410可以包括网络界面控制器(NIC)或用于与以太网或其他有线网络通信的网络适配器或无线NIC(WNIC)或用于与无线网络(诸如WI-FI网)通信的无线适配器。本发明涵盖任何合适的网络和用于它的任何合适的通信界面410。例如并且不限于,计算机系统400可以与自组网、个人局域网(PAN)、或局域网(LAN)、广域网(WAN)、城域网(MAN)、英特网的一个或多个部分、或这些中的两个或多个的组合通信。一个或多个这些网络的一个或多个部分可以是有线的或无线的。举例来说,计算机系统400可以与无线PAN(WPAN)(诸如,例如,蓝牙WPAN)、WI-FI网,WI-MAX网、蜂窝电话网(诸如,例如全球移动通信系统(GSM)网)、或其他合适的无线网络或这些中的两个或多个的组合来通信。在适当的情况下,计算机系统400可以包括用于任何这些网络的任何合适的通信界面410。在适当的情况下,通信界面410可以包括一个或多个通信界面410。虽然本发明描述并阐明了特定通信界面,但本发明涵盖任何合适的通信界面。
在特定实施例中,总线412包括硬件,软件,或将计算机系统400的组件彼此耦连的硬件和软件。例如并且不限于,总线412可以包括加速图形端口(AGP)或其他图形总线,扩展工业标准结构(EISA)总线,前端总线(FSB),超传输(HT)互连,工业标准结构(ISA)总线,Infiniband互连,低引脚数(LPC)总线,存储器总线,微通道结构(MCA)总线,外部组件互连(PCI)总线,PCI-Express(PCI-X)总线,串行高级技术附件(SATA)总线,视频电子标准协会本地(VLB)总线,或另外合适的总线,或者这些中的两个或多个的组合。在适当的情况下,总线412可以包括一个或多个总线412。虽然本发明描述并阐明了特定总线,但本发明涵盖任何合适的总线或互连。
此处,所提到的计算机可读储存介质包含一个或多个永久的、有形的、具有结构的计算机可读储存介质。例如并且不限于,计算机可读储存介质可以包括基于半导体或其他集成电路(IC)(诸如,例如现场可编程逻辑阵列(FPGA)或特定用途集成电路(ASIC)),硬盘,HDD,混合式硬盘(HHD),光盘,光盘驱动器(ODD),磁光盘,磁光驱动器,软盘,软盘驱动器(FDD),磁带,全息储存介质,固态驱动器(SSD),RAM驱动器,Secure Digital卡,Secure Digital驱动器,或在适当的情况下,另外合适的计算机可读储存介质或这些中的两个或多个的组合。此处,所提到的计算机可读储存介质排除美国法典第35编第101节所规定的不给予专利保护的任何介质。此处,所提到的计算机可读储存介质将信号传输的短暂形式(诸如传播电或电磁信号本身)排除在根据美国法典第35编第101节规定的不给予专利保护的范围之外。计算机可读永久性储存介质可以是易失的,非易失的,或在适当的情况下为易失和非易失的组合。
本发明涵盖一个或多个实现任何合适储存的计算机可读储存介质。在特定实施例中,计算机可读储存介质实现处理器402的一个或多个部分(诸如,例如一个或多个内部寄存器或缓存),存储器404的一个或多个部分,储存器406的一个或多个部分,或在适当的情况下为这些的组合。在特定实施例中,计算机可读储存介质实现RAM或ROM。在特定实施例中,计算机储存介质实现易失或永久的存储器。在特定实施例中,一个或多个计算机可读储存介质记录有软件。此处,所提到的软件可以包含一个或多个应用,字节代码,一个或多个计算机程序,一个或多个可执行文件,一个或多个指令,逻辑,机器代码,一个或多个脚本,或源代码,以及在适当的情况下反之亦然。在特定实施例中,软件包括一个或多个应用编程界面(API)。本发明涵盖以任何合适的编程语言或编程语言的组合编写或以其他方式表达的任何合适的软件。在特定实施例中,软件被表达为源代码或目标代码。在特定实施例中,软件被以更高级的编程语言(诸如,例如C,Perl,或其他合适的扩展)表达。在特定实施例中,软件被以较低级的编程语言(诸如,汇编语言(或机器代码))表达。在特定实施例中,软件被以超文本标记语言(HTML)、可扩展标记语言(XML)或其他合适的标记语言表达。
此处,“或”是包括的而非排除的,除非另外明确表明或依上下文以其他方式表明。因此,此处,“A或B”意在“A,B或A和B”,除非另外明确表明或依上下文以其他方式表明。另外,“和”既是共同的又是个别的,除非另外明确表明或依上下文以其他方式表明。因此,此处,“A和B”意在“A和B,共同且个别的”,除非另外明确表明或依上下文以其他方式表明。
本发明包含本领域普通技术人员所能理解的此处示例性实施例的所有的改变、替代、变化、变换和修改。类似地,在适当的情况下,所附权利要求包含本领域普通技术人员所能理解的此处示例性实施例的所有的改变、替代、变化、变换和修改。此外,所附权利要求中所提到的装置或系统,或者适应于、布置于、有能力、配置于、使能够、可操作的或运行的以执行特定功能的装置或系统的组件包含装置、系统、组件,不论其或特定功能被激活、打开或解锁是否,只要所述装置、系统或组件是适用的、布置的、有能力的、配置的、使能够、可操作的或运行的即可。
Claims (45)
1.一种方法,包括:
通过第一计算装置分配第一虚拟存储器;
通过所述第一计算装置接收第一软件的可执行代码;
通过所述第一计算装置将所述第一软件的可执行代码直接写入所述第一虚拟存储器;
通过所述第一计算装置将所述第一虚拟存储器标记为可执行的;
通过所述第一计算装置执行直接来自所述第一虚拟存储器的所述第一软件的可执行代码;以及
在所述第一软件的可执行代码的协助下通过所述第一计算装置下载并执行第二软件的可执行代码。
2.如权利要求1所述的方法,还包括加载一个或多个由所述第一软件的可执行代码所需要的共享库。
3.如权利要求2所述的方法,所述第一软件的可执行代码是在所述第一计算装置上运行的浏览器中所执行的客户侧脚本。
4.如权利要求3所述的方法,其中,所述客户侧脚本访问由所述浏览器支持的外来函数界面。
5.如权利要求4所述的方法,其中,所述浏览器是MozillaFirefox,并且所述客户侧脚本是JavaScript。
6.如权利要求3所述的方法,其中,所述客户侧脚本访问驻存于所述第一计算装置的外来函数库。
7.如权利要求6所述的方法,其中,所述外来函数库是ctypes库。
8.如权利要求1所述的方法,还包括在完成所述第一软件的可执行代码的执行后解除分配所述第一虚拟存储器,从而使得在所述第一计算装置上没有所述第一软件的可执行代码的任何踪迹。
9.如权利要求1所述的方法,其中,下载并执行由所述第一软件的可执行代码所协助的所述第二软件的可执行代码包括:
接收所述第二软件的可执行代码;
从所述数据流中提取所述第二软件的可执行代码;
分配第二虚拟存储器;
将所述第二软件的可执行代码直接写入所述第二虚拟存储器;
将所述第二虚拟存储器标记为可执行的;以及
执行直接来自所述第二虚拟存储器所述第二软件的可执行代码。
10.如权利要求9所述的方法,还包括:
验证所述第二软件的可执行代码;
加载一个或多个由存在于所述第一计算装置上的所述第二软件的可执行代码所需要的第一共享库;以及
从第二计算装置下载一个或多个由所述第二软件的可执行代码所需要的第二共享库。
11.如权利要求9所述的方法,还包括在完成所述第二软件的可执行代码的执行后解除分配所述第二虚拟存储器,从而使得在所述第一计算装置上没有所述第二软件的可执行代码的任何踪迹。
12.如权利要求9所述的方法,还包括基于所述第一计算装置的操作系统确定所述第二软件。
13.如权利要求9所述的方法,其中,
所述第一软件的可执行代码是从第二计算装置接收的;以及
所述第二软件的可执行代码是从第三计算装置接收的。
14.如权利要求9所述的方法,其中,所述第一软件的可执行代码和所述第二软件的可执行代码都是从第二计算装置接收的。
15.如权利要求9所述的方法,其中,所述第二软件的可执行代码被内嵌到数据流中。
16.一种第一系统,包括:
包含可被一个或多个处理器执行的指令的存储器;和
耦连到所述存储器的一个或多个处理器,所述一个或多个处理器可操作以执行所述指令,当执行所述指令时所述一个或多个处理器可操作,以:
分配第一虚拟存储器;
接收第一软件的可执行代码;
将所述第一软件的可执行代码直接写入所述第一虚拟存储器;
将所述第一虚拟存储器标记为可执行的;
执行直接来自所述第一虚拟存储器的所述第一软件的可执行代码;以及
下载并执行由所述第一软件的可执行代码所协助的第二软件的可执行代码。
17.如权利要求16所述的系统,其中,当执行所述指令时所述一个或多个处理器可进一步操作,以加载一个或多个由所述第一软件的可执行代码所需要的共享库。
18.如权利要求16所述的系统,所述第一软件的可执行代码是在所述第一计算装置上运行的浏览器中所执行的客户侧脚本。
19.如权利要求18所述的系统,其中,所述客户侧脚本访问由所述浏览器支持的外来函数界面。
20.如权利要求19所述的系统,其中,所述浏览器是MozillaFirefox,并且所述客户侧脚本是JavaScript。
21.如权利要求18所述的系统,其中,所述客户侧脚本访问驻存于所述第一计算装置上的外来函数库。
22.如权利要求21所述的系统,其中,所述外来函数库是ctypes库。
23.如权利要求16所述的系统,其中,当执行所述指令时所述一个或多个处理器可进一步操作,以在完成所述第一软件的可执行代码的执行后解除分配所述第一虚拟存储器,从而使得在所述第一计算装置上没有所述第一软件的可执行代码的任何踪迹。
24.如权利要求16所述的系统,其中,在所述第一软件的可执行代码的协助下下载并执行第二软件的可执行代码包括:
接收所述第二软件的可执行代码;
从所述数据流中提取所述第二软件的可执行代码;
分配第二虚拟存储器;
将所述第二软件的可执行代码直接写入所述第二虚拟存储器;
将所述第二虚拟存储器标记为可执行的;以及
执行直接来自所述第二虚拟存储器的所述第二软件的可执行代码。
25.如权利要求24所述的系统,其中,当执行所述指令时所述一个或多个处理器可进一步操作,以:
验证所述第二软件的可执行代码;
加载一个或多个由存在于所述第一计算装置上的所述第二软件的可执行代码所需要的第一共享库;以及
从第二计算装置下载一个或多个由所述第二软件的可执行代码所需要的第二共享库。
26.如权利要求24所述的系统,其中,当执行所述指令时所述一个或多个处理器可进一步操作,以在完成所述第二软件的可执行代码的执行后解除分配所述第二虚拟存储器,从而使得在所述第一计算装置上没有所述第二软件的可执行代码的任何踪迹。
27.如权利要求24所述的系统,其中,当执行所述指令时所述一个或多个处理器可进一步操作,以基于所述第一计算装置的操作系统确定所述第二软件。
28.如权利要求24所述的系统,其中:
所述第一软件的可执行代码是从第二计算装置接收的;以及
所述第二软件的可执行代码是从第三计算装置接收的。
29.如权利要求24所述的系统,其中,所述第一软件的可执行代码和所述第二软件的可执行代码都是从第二计算装置接收的。
30.如权利要求24所述的系统,其中,所述第二软件的可执行代码被内嵌到数据流中。
31.一个或多个记录有软件的计算机可读储存介质,所述软件在由第一计算机系统执行时可操作,以:
分配第一虚拟存储器;
接收第一软件的可执行代码;
将所述第一软件的可执行代码直接写入所述第一虚拟存储器;
将所述第一虚拟存储器标记为可执行的;
执行直接来自所述第一虚拟存储器的所述第一软件的可执行代码;以及
在所述第一软件的可执行代码的协助下下载并执行第二软件的可执行代码。
32.如权利要求31所述的介质,其中,当由所述第一计算机系统执行时所述软件可进一步操作,以加载一个或多个由所述第一软件的可执行代码所需要的共享库。
33.如权利要求31所述的介质,所述第一软件的可执行代码是在所述第一计算装置上运行的浏览器中所执行的客户侧脚本。
34.如权利要求33所述的介质,其中,所述客户侧脚本访问由所述浏览器支持的外来函数界面。
35.如权利要求34所述的介质,其中,所述浏览器是MozillaFirefox,并且所述客户侧脚本是JavaScript。
36.如权利要求33所述的介质,其中,所述客户侧脚本访问驻存于所述第一计算装置上的外来函数库。
37.如权利要求36所述的介质,其中,所述外来函数库是ctypes库。
38.如权利要求31所述的介质,其中,当由第一计算机系统执行时所述软件可进一步操作,以在完成所述第一软件的可执行代码的执行后解除分配所述第一虚拟存储器,从而使得在所述第一计算装置上没有所述第一软件的可执行代码的任何踪迹。
39.如权利要求31所述的介质,其中,在所述第一软件的可执行代码的协助下下载并执行第二软件的可执行代码包括:
接收所述第二软件的可执行代码;
从所述数据流中提取所述第二软件的可执行代码;
分配第二虚拟存储器;
将所述第二软件的可执行代码直接写入所述第二虚拟存储器;
将所述第二虚拟存储器标记为可执行的;以及
执行直接来自所述第二虚拟存储器的所述第二软件的可执行代码。
40.如权利要求39所述的介质,其中,当由第一计算机系统执行时所述软件可进一步操作,以:
验证所述第二软件的可执行代码;
加载一个或多个由存在于所述第一计算装置上的所述第二软件的可执行代码所需要的第一共享库;以及
从第二计算装置下载一个或多个由所述第二软件的可执行代码所需要的第二共享库。
41.如权利要求39所述的介质,其中,当由所述第一计算机系统执行时所述软件可进一步操作,以在完成所述第二软件的可执行代码的执行后解除分配所述第二虚拟存储器,从而使得在所述第一计算装置上没有所述第二软件的可执行代码的任何踪迹。
42.如权利要求39所述的介质,其中,当由所述第一计算机系统执行时所述软件可进一步操作,以基于所述第一计算装置的操作系统确定所述第二软件。
43.如权利要求39所述的介质,其中,所述第一软件的可执行代码是从第二计算装置接收的;以及所述第二软件的可执行代码是从第三计算装置接收的。
44.如权利要求39所述的介质,其中,所述第一软件的可执行代码和所述第二软件的可执行代码都是从第二计算装置接收的。
45.如权利要求39所述的介质,其中,所述第二软件的可执行代码被内嵌到数据流中。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/031,747 US10114660B2 (en) | 2011-02-22 | 2011-02-22 | Software application delivery and launching system |
US13/031,747 | 2011-02-22 | ||
PCT/US2012/026125 WO2012116068A2 (en) | 2011-02-22 | 2012-02-22 | Software application delivery and launching system |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103443764A true CN103443764A (zh) | 2013-12-11 |
Family
ID=46653644
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2012800137111A Pending CN103443764A (zh) | 2011-02-22 | 2012-02-22 | 软件应用分配和发起系统 |
Country Status (8)
Country | Link |
---|---|
US (2) | US10114660B2 (zh) |
EP (1) | EP2678776B1 (zh) |
JP (2) | JP5711394B2 (zh) |
KR (2) | KR101557211B1 (zh) |
CN (1) | CN103443764A (zh) |
AU (2) | AU2012220706B2 (zh) |
CA (1) | CA2827909C (zh) |
WO (1) | WO2012116068A2 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108509203A (zh) * | 2018-03-13 | 2018-09-07 | 腾讯科技(深圳)有限公司 | 软件跨云部署方法、计算机设备及存储介质 |
CN111913755A (zh) * | 2020-07-07 | 2020-11-10 | 海信视像科技股份有限公司 | 一种应用程序的扫描方法和显示设备 |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9436487B2 (en) * | 2012-03-29 | 2016-09-06 | Adobe Systems Incorporated | Method and apparatus for creating a platform agnostic application file |
CN103365675A (zh) * | 2012-04-02 | 2013-10-23 | 鸿富锦精密工业(深圳)有限公司 | 试用软件处理系统及方法 |
WO2014065643A1 (en) * | 2012-10-25 | 2014-05-01 | Ventspils Augstskola | A method for managing a software defined radio device installed on a small satellite |
US9215075B1 (en) | 2013-03-15 | 2015-12-15 | Poltorak Technologies Llc | System and method for secure relayed communications from an implantable medical device |
US9288225B1 (en) * | 2013-04-17 | 2016-03-15 | Ca, Inc. | Server port sharing based on shared socket |
EP3403178B1 (en) * | 2016-01-15 | 2019-11-20 | Google LLC | Identifiers across application instances |
JP6537481B2 (ja) * | 2016-10-05 | 2019-07-03 | キヤノン株式会社 | 放射線撮像装置及び放射線撮像システム |
US11188353B2 (en) * | 2018-07-12 | 2021-11-30 | Vmware, Inc. | Runtime extension system for bundled web application |
US11947989B2 (en) * | 2020-02-14 | 2024-04-02 | SparkCognition, Inc. | Process flow for model-based applications |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020087717A1 (en) * | 2000-09-26 | 2002-07-04 | Itzik Artzi | Network streaming of multi-application program code |
CN101322386A (zh) * | 2006-03-08 | 2008-12-10 | 西门子家庭及办公室通讯装置两合公司 | 在用户设备与服务器之间传输数据的方法以及配置/软件更新服务器 |
Family Cites Families (51)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5870609A (en) | 1993-12-17 | 1999-02-09 | Xircom, Inc. | Technique for bootstrapping executable code to an adapter |
FR2738367B1 (fr) | 1995-09-05 | 1997-10-17 | Scm Microsystems | Procede et appareil de telechargement rapide de fonctions dans une memoire volatile |
US5829013A (en) | 1995-12-26 | 1998-10-27 | Intel Corporation | Memory manager to allow non-volatile memory to be used to supplement main memory |
US6052780A (en) | 1996-09-12 | 2000-04-18 | Open Security Solutions, Llc | Computer system and process for accessing an encrypted and self-decrypting digital information product while restricting access to decrypted digital information |
US6226665B1 (en) | 1996-09-19 | 2001-05-01 | Microsoft Corporation | Application execution environment for a small device with partial program loading by a resident operating system |
US5841870A (en) * | 1996-11-12 | 1998-11-24 | Cheyenne Property Trust | Dynamic classes of service for an international cryptography framework |
US20010044850A1 (en) | 1998-07-22 | 2001-11-22 | Uri Raz | Method and apparatus for determining the order of streaming modules |
PL346276A1 (en) | 1998-08-27 | 2002-01-28 | Ibm | System for embedding additional information in video data, and embedding method |
US6570926B1 (en) | 1999-02-25 | 2003-05-27 | Telcordia Technologies, Inc. | Active techniques for video transmission and playback |
US6637023B1 (en) | 1999-03-03 | 2003-10-21 | Microsoft Corporation | Method and system for updating read-only software modules |
US7188186B1 (en) | 1999-09-03 | 2007-03-06 | Meyer Thomas W | Process of and system for seamlessly embedding executable program code into media file formats such as MP3 and the like for execution by digital media player and viewing systems |
US6493871B1 (en) | 1999-09-16 | 2002-12-10 | Microsoft Corporation | Method and system for downloading updates for software installation |
US6976062B1 (en) * | 1999-09-22 | 2005-12-13 | Intermec Ip Corp. | Automated software upgrade utility |
JP2004534973A (ja) | 2000-04-14 | 2004-11-18 | ゴー アヘッド ソフトウェア インコーポレイテッド | ネットワークデバイスのアップグレードシステム及び方法 |
US6598130B2 (en) * | 2000-07-31 | 2003-07-22 | Hewlett-Packard Development Company, L.P. | Technique for referencing distributed shared memory locally rather than remotely |
US7039116B1 (en) | 2000-11-07 | 2006-05-02 | Cisco Technology, Inc. | Methods and apparatus for embedding and format conversion of compressed video data |
US20020129107A1 (en) * | 2001-03-12 | 2002-09-12 | Loughran Stephen A. | Method and apparatus for automatic content handling |
US7827611B2 (en) | 2001-08-01 | 2010-11-02 | Mcafee, Inc. | Malware scanning user interface for wireless devices |
US8621077B2 (en) * | 2001-09-21 | 2013-12-31 | Mcafee, Inc. | Distribution of security policies for small to medium-sized organizations |
US7203940B2 (en) | 2002-04-29 | 2007-04-10 | Hewlett-Packard Development Company, Lp. | Automated installation of an application |
US20040010587A1 (en) | 2002-07-09 | 2004-01-15 | Arturo Altamirano | Method and apparatus for displaying real time graphical and digital wellbore information responsive to browser initiated client requests via the internet |
CN1672133A (zh) | 2002-08-02 | 2005-09-21 | 艾利森电话股份有限公司 | 优化的代码生成 |
WO2004092897A2 (en) | 2003-04-11 | 2004-10-28 | Mirra, Inc. | Service platform application distribution manager |
US7735057B2 (en) | 2003-05-16 | 2010-06-08 | Symantec Corporation | Method and apparatus for packaging and streaming installation software |
KR101081729B1 (ko) | 2003-07-07 | 2011-11-08 | 로비 솔루션스 코포레이션 | 저작권 침해를 제어하고 쌍방향 컨텐츠를 인에이블시키기 위한 재프로그램가능한 보안 |
US7886287B1 (en) | 2003-08-27 | 2011-02-08 | Avaya Inc. | Method and apparatus for hot updating of running processes |
US7673297B1 (en) | 2003-09-03 | 2010-03-02 | The Directv Group, Inc. | Automatic software update detection and flexible installer for set-top boxes |
EP1733294A1 (en) * | 2004-03-26 | 2006-12-20 | Absolute Software Corporation | Persistent servicing agent |
US7735136B2 (en) | 2005-04-18 | 2010-06-08 | Vmware, Inc. | 0-touch and 1-touch techniques for improving the availability of computer programs under protection without compromising security |
US20060282620A1 (en) * | 2005-06-14 | 2006-12-14 | Sujatha Kashyap | Weighted LRU for associative caches |
US20070180061A1 (en) * | 2006-02-02 | 2007-08-02 | International Business Machines Corporation | Methods and apparatus for interactive specification of context-sensitive sevice level agreements; for provisioning of resources required during service delivery events regulated by service level agreements; and for monitoring compliance with service level agreements during service delivery events |
US8538808B2 (en) * | 2006-12-14 | 2013-09-17 | Yahoo! Inc. | Creative audit system |
US20080201705A1 (en) * | 2007-02-15 | 2008-08-21 | Sun Microsystems, Inc. | Apparatus and method for generating a software dependency map |
CA2682249C (en) | 2007-03-29 | 2014-05-20 | Christopher Murphy | Methods and systems for internet security via virtual software |
US8185886B2 (en) | 2007-06-26 | 2012-05-22 | Intel Corporation | Method and apparatus to enable dynamically activated firmware updates |
US20090083474A1 (en) | 2007-09-21 | 2009-03-26 | Thomas Cooke | File allocation table management |
US8365153B2 (en) * | 2007-10-26 | 2013-01-29 | Qualcomm Incorporated | Server-based code compilation |
KR100936239B1 (ko) | 2007-12-18 | 2010-01-12 | 한국전자통신연구원 | 스트리밍 기반 이동형 소프트웨어 제공 시스템 및 방법 |
US20090172637A1 (en) | 2007-12-28 | 2009-07-02 | Microsoft Corporation | Markup-based language for manifests |
US20090183182A1 (en) * | 2008-01-10 | 2009-07-16 | Microsoft Corporation | Dynamic Composition of Virtualized Applications |
US8346897B2 (en) | 2008-02-25 | 2013-01-01 | Jon Jaroker | System and method for deploying and maintaining software applications |
US8839227B2 (en) | 2008-02-29 | 2014-09-16 | Arris Enterprises, Inc. | Preventing overwrite of nonessential code during essential code update |
US20090248524A1 (en) * | 2008-03-26 | 2009-10-01 | Jonathan Defoy | Systems, methods and apparatus for the display of advertisements in a software application |
US9575774B2 (en) | 2008-04-25 | 2017-02-21 | Vmware, Inc. | Linking virtualized application namespaces at runtime |
US8424082B2 (en) | 2008-05-08 | 2013-04-16 | Google Inc. | Safely executing an untrusted native code module on a computing device |
US9354853B2 (en) * | 2008-07-02 | 2016-05-31 | Hewlett-Packard Development Company, L.P. | Performing administrative tasks associated with a network-attached storage system at a client |
US8745601B1 (en) * | 2008-07-17 | 2014-06-03 | Apple Inc. | Methods and systems for using data structures for operating systems |
US8776038B2 (en) | 2008-08-07 | 2014-07-08 | Code Systems Corporation | Method and system for configuration of virtualized software applications |
US9049478B2 (en) | 2009-04-08 | 2015-06-02 | Dialogic Corporation | System and method for implementing a dynamic media link |
US20110047540A1 (en) | 2009-08-24 | 2011-02-24 | Embarcadero Technologies Inc. | System and Methodology for Automating Delivery, Licensing, and Availability of Software Products |
US8863108B2 (en) * | 2010-11-23 | 2014-10-14 | Red Hat, Inc. | Finding out if software will run on an operating system without installing that software |
-
2011
- 2011-02-22 US US13/031,747 patent/US10114660B2/en active Active
-
2012
- 2012-02-22 CA CA2827909A patent/CA2827909C/en active Active
- 2012-02-22 AU AU2012220706A patent/AU2012220706B2/en active Active
- 2012-02-22 WO PCT/US2012/026125 patent/WO2012116068A2/en active Application Filing
- 2012-02-22 EP EP12750056.9A patent/EP2678776B1/en active Active
- 2012-02-22 KR KR1020137024462A patent/KR101557211B1/ko active IP Right Grant
- 2012-02-22 JP JP2013554688A patent/JP5711394B2/ja active Active
- 2012-02-22 CN CN2012800137111A patent/CN103443764A/zh active Pending
- 2012-02-22 KR KR1020157006695A patent/KR101759801B1/ko active IP Right Grant
-
2015
- 2015-03-05 JP JP2015043323A patent/JP5916002B2/ja active Active
- 2015-10-15 AU AU2015243038A patent/AU2015243038B2/en active Active
-
2018
- 2018-10-09 US US16/154,802 patent/US20190042283A1/en not_active Abandoned
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020087717A1 (en) * | 2000-09-26 | 2002-07-04 | Itzik Artzi | Network streaming of multi-application program code |
CN101322386A (zh) * | 2006-03-08 | 2008-12-10 | 西门子家庭及办公室通讯装置两合公司 | 在用户设备与服务器之间传输数据的方法以及配置/软件更新服务器 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108509203A (zh) * | 2018-03-13 | 2018-09-07 | 腾讯科技(深圳)有限公司 | 软件跨云部署方法、计算机设备及存储介质 |
CN108509203B (zh) * | 2018-03-13 | 2021-05-28 | 腾讯科技(深圳)有限公司 | 软件跨云部署方法、计算机设备及存储介质 |
CN111913755A (zh) * | 2020-07-07 | 2020-11-10 | 海信视像科技股份有限公司 | 一种应用程序的扫描方法和显示设备 |
CN111913755B (zh) * | 2020-07-07 | 2024-04-02 | 海信视像科技股份有限公司 | 一种应用程序的扫描方法和显示设备 |
Also Published As
Publication number | Publication date |
---|---|
CA2827909A1 (en) | 2012-08-30 |
AU2015243038A1 (en) | 2015-11-05 |
JP5916002B2 (ja) | 2016-05-11 |
KR20150036822A (ko) | 2015-04-07 |
AU2012220706B2 (en) | 2015-07-16 |
EP2678776B1 (en) | 2022-08-31 |
AU2012220706A1 (en) | 2013-09-12 |
EP2678776A4 (en) | 2015-04-15 |
JP2015122115A (ja) | 2015-07-02 |
US10114660B2 (en) | 2018-10-30 |
CA2827909C (en) | 2018-02-27 |
KR101557211B1 (ko) | 2015-10-02 |
US20190042283A1 (en) | 2019-02-07 |
KR20130124974A (ko) | 2013-11-15 |
JP2014509013A (ja) | 2014-04-10 |
AU2015243038B2 (en) | 2017-08-17 |
NZ614445A (en) | 2015-03-27 |
WO2012116068A3 (en) | 2012-11-01 |
KR101759801B1 (ko) | 2017-07-31 |
NZ705843A (en) | 2016-09-30 |
EP2678776A2 (en) | 2014-01-01 |
JP5711394B2 (ja) | 2015-04-30 |
US20120215831A1 (en) | 2012-08-23 |
WO2012116068A2 (en) | 2012-08-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103443764A (zh) | 软件应用分配和发起系统 | |
US10740443B2 (en) | System and method for code obfuscation of application | |
KR101494504B1 (ko) | 스트림-기반 소프트웨어 애플리케이션 전달 및 개시 시스템 | |
CN107506221A (zh) | 应用程序升级方法、装置及设备 | |
Langiu et al. | Upkit: An open-source, portable, and lightweight update framework for constrained iot devices | |
CN110214314B (zh) | 操作系统验证 | |
JP2017142792A (ja) | ファイル保護方法 | |
CN113110849A (zh) | 按需加载资源 | |
JP7015120B2 (ja) | アプリケーションパッケージを提供する方法およびシステム、アプリケーションを実行する方法およびシステム | |
KR20150080310A (ko) | 어플리케이션 업데이트 서버 및 방법 | |
KR102361534B1 (ko) | 컴파일러를 이용한 난독화 방법 및 시스템 | |
AU2014203156B2 (en) | Stream-based software application delivery and launching system | |
NZ705843B2 (en) | Software application delivery and launching system | |
Michéle et al. | Media Playback System | |
NZ614445B2 (en) | Software application delivery and launching system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 1190475 Country of ref document: HK |
|
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20131211 |
|
REG | Reference to a national code |
Ref country code: HK Ref legal event code: WD Ref document number: 1190475 Country of ref document: HK |