Virtual installation is used to facilitate streaming of software. With virtual installation, software can be virtually installed without actually downloading the software. One technique for virtually installing software involves streaming. Typically, software streaming entails anticipating what files and resources are to be consumed by a program during the streaming. A technique for ensuring that the software has the required resources involves taking a snapshot of a drive before installing a program, installing the program, taking a snapshot after installing the program, and comparing the snapshot before and after the installation to determine what changes have been made to the drive. In this way, the resources to be used by the program can be determined.
However, this technique requires taking snapshots of a drive, which can be time-consuming and may consume relatively large amounts of memory or storage resources.
The following description of
The web server 104 is typically at least one computer system which operates as a server computer system and is configured to operate with the protocols of the world wide web and is coupled to the Internet. The web server system 104 can be a conventional server computer system. Optionally, the web server 104 can be part of an ISP which provides access to the Internet for client systems. The web server 104 is shown coupled to the server computer system 106 which itself is coupled to web content 108, which can be considered a form of a media database. While two computer systems 104 and 106 are shown in
Access to the network 102 is typically provided by Internet service providers (ISPs), such as the ISPs 110 and 116. Users on client systems, such as client computer systems 112, 118, 122, and 126 obtain access to the Internet through the ISPs 110 and 116. Access to the Internet allows users of the client computer systems to exchange information, receive and send e-mails, and view documents, such as documents which have been prepared in the HTML format. These documents are often provided by web servers, such as web server 104, which are referred to as being “on” the Internet. Often these web servers are provided by the ISPs, such as ISP 110, although a computer system can be set up and connected to the Internet without that system also being an ISP.
Client computer systems 112, 118, 122, and 126 can each, with the appropriate web browsing software, view HTML pages provided by the web server 104. The ISP 110 provides Internet connectivity to the client computer system 112 through the modem interface 114, which can be considered part of the client computer system 112. The client computer system can be a personal computer system, a network computer, a web TV system, or other computer system. While
Similar to the ISP 114, the ISP 116 provides Internet connectivity for client systems 118, 122, and 126, although as shown in
Client computer systems 122 and 126 are coupled to the LAN 130 through network interfaces 124 and 128, which can be ethernet network or other network interfaces. The LAN 130 is also coupled to a gateway computer system 132 which can provide firewall and other Internet-related services for the local area network. This gateway computer system 132 is coupled to the ISP 116 to provide Internet connectivity to the client computer systems 122 and 126. The gateway computer system 132 can be a conventional server computer system.
Alternatively, a server computer system 134 can be directly coupled to the LAN 130 through a network interface 136 to provide files 138 and other services to the clients 122 and 126, without the need to connect to the Internet through the gateway system 132.
The computer 142 interfaces to external systems through the communications interface 150, which may include a modem or network interface. It will be appreciated that the communications interface 150 can be considered to be part of the computer system 140 or a part of the computer 142. The communications interface can be an analog modem, isdn modem, cable modem, token ring interface, satellite transmission interface (e.g. “direct PC”), or other interfaces for coupling a computer system to other computer systems.
The processor 148 may be, for example, a conventional microprocessor such as an Intel Pentium microprocessor or Motorola power PC microprocessor. The memory 152 is coupled to the processor 148 by a bus 160. The memory 152 can be dynamic random access memory (dram) and can also include static ram (sram). The bus 160 couples the processor 148 to the memory 152, also to the non-volatile storage 156, to the display controller 154, and to the I/O controller 158.
The I/O devices 144 can include a keyboard, disk drives, printers, a scanner, and other input and output devices, including a mouse or other pointing device. The display controller 154 may control in the conventional manner a display on the display device 146, which can be, for example, a cathode ray tube (CRT) or liquid crystal display (LCD). The display controller 154 and the I/O controller 158 can be implemented with conventional well known technology.
The non-volatile storage 156 is often a magnetic hard disk, an optical disk, or another form of storage for large amounts of data. Some of this data is often written, by a direct memory access process, into memory 152 during execution of software in the computer 142. One of skill in the art will immediately recognize that the terms “machine-readable medium” or “computer-readable medium” includes any type of storage device that is accessible by the processor 148 and also encompasses a carrier wave that encodes a data signal.
The computer system 140 is one example of many possible computer systems which have different architectures. For example, personal computers based on an Intel microprocessor often have multiple buses, one of which can be an I/O bus for the peripherals and one that directly connects the processor 148 and the memory 152 (often referred to as a memory bus). The buses are connected together through bridge components that perform any necessary translation due to differing bus protocols.
Network computers are another type of computer system that can be used with the present invention. Network computers do not usually include a hard disk or other mass storage, and the executable programs are loaded from a network connection into the memory 152 for execution by the processor 148. A Web TV system, which is known in the art, is also considered to be a computer system according to the present invention, but it may lack some of the features shown in
In addition, the computer system 140 is controlled by operating system software which includes a file management system, such as a disk operating system, which is part of the operating system software. One example of an operating system software with its associated file management system software is the family of operating systems known as Windows® from Microsoft Corporation of Redmond, Wash., and their associated file management systems. Another example of operating system software with its associated file management system software is the Linux operating system and its associated file management system. The file management system is typically stored in the non-volatile storage 156 and causes the processor 148 to execute the various acts required by the operating system to input and output data and to store data in memory, including storing files on the non-volatile storage 156.
Some portions of the detailed description are presented in terms of algorithms and symbolic representations of operations on data bits within a computer memory. These algorithmic descriptions and representations are the means used by those skilled in the data processing arts to most effectively convey the substance of their work to others skilled in the art. An algorithm is here, and generally, conceived to be a self-consistent sequence of operations leading to a desired result. The operations are those requiring physical manipulations of physical quantities. Usually, though not necessarily, these quantities take the form of electrical or magnetic signals capable of being stored, transferred, combined, compared, and otherwise manipulated. It has proven convenient at times, principally for reasons of common usage, to refer to these signals as bits, values, elements, symbols, characters, terms, numbers, or the like.
It should be borne in mind, however, that all of these and similar terms are to be associated with the appropriate physical quantities and are merely convenient labels applied to these quantities. Unless specifically stated otherwise as apparent from the following discussion, it is appreciated that throughout the description, discussions utilizing terms such as “processing” or “computing” or “calculating” or “determining” or “displaying” or the like, refer to the action and processes of a computer system, or similar electronic computing device, that manipulates and transforms data represented as physical (electronic) quantities within the computer system's registers and memories into other data similarly represented as physical quantities within the computer system memories or registers or other such information storage, transmission or display devices.
The present invention, in some embodiments, also relates to apparatus for performing the operations herein. This apparatus may be specially constructed for the required purposes, or it may comprise a general purpose computer selectively activated or reconfigured by a computer program stored in the computer. Such a computer program may be stored in a computer readable storage medium, such as, but is not limited to, any type of disk including floppy disks, optical disks, CD-roms, and magnetic-optical disks, read-only memories (ROMs), random access memories (RAMs), EPROMs, EEPROMs, magnetic or optical cards, or any type of media suitable for storing electronic instructions, and each coupled to a computer system bus.
The algorithms and displays presented herein are not inherently related to any particular computer or other apparatus. Various general purpose systems may be used with programs in accordance with the teachings herein, or it may prove convenient to construct more specialized apparatus to perform the required method steps. The required structure for a variety of these systems will appear from the description below. In addition, the present invention is not described with reference to any particular programming language, and various embodiments may thus be implemented using a variety of programming languages.
It had been discovered through trial-and-error that a pristine operating environment is important for testing of certain applications, such as streaming applications. To this end, in an embodiment, ghosting is used to ensure a pristine testing environment. Ghosting is a technique that includes preparing a clean environment, creating a copy of a partition associated with the clean environment (the ghosted partition), and overwriting a partition with the ghosted partition to restore the clean environment. Thus, ghosting could be thought of as a “partition, save, restore” procedure. One utility that facilitates ghosting is Norton Ghost™ 7.5. In an embodiment, simply removing applications or performing a conventional backup is insufficient to remove certain files or registry values. For example, performing a conventional backup may remove an application, but leave a registry value related to the application. The registry value may be used again if the application is re-installed. However, in the context of a streaming application, a testing environment must be started anew each time as if the streaming application had never been on the testing machine. Accordingly, in an embodiment, the testing computer 164 may have a ghosted configuration. Alternatively, the testing computer 164 may have a clean operating environment that is accomplished by deleting files and registry value artifacts associated with an application that remain after the application is removed.
The testing computer 164 may be coupled to and accessible through the network 162. The testing computer 164 could be part of a computer system, such as the computer system 140 (
The computer system 140 includes a processor 166, a memory 168, and a bus 170 that couples the processor 166 to the memory 168. The memory 168 may include both volatile memory, such as DRAM or SRAM, and non-volatile memory, such as magnetic or optical storage. The processor 166 executes code in the memory 168. The memory 168 includes an interception-based resource detection program 172, an installer 174, and resources 176. Some or all of the applications or data of computer system 140 could be served as Web content, such as by the server computer 106 (
The interception-based resource detection program 172 monitors the installer 174 while the installer 174 is executed. The interception-based resource detection program 172 creates a record of resources 176 associated with the installer 174. The resources 176 may include installed files, registry keys, and other resources called or used by the installer 174. In an embodiment, the installer 174 is self-contained such that the installer 174 need not access remote resources. Some or all of the resources 176 may or may not be included in the installer 174. Alternatively, resources may be available from a remote location and downloaded or otherwise provided when the installer 174 is executed. The interception-based resource detection program 172 may infer from the record which resources are needed to stream an application that is associated with the installer 174.
The installer 174 may or may not include sub-processes. For example, the installer 174 may check whether a program, such as DirectX™, is installed and install the program if it is not. The installation of the program may be executed as a sub-process of the installer 174. Another example of a sub-process may include an installer 174 that gathers information from a user in a GUI then launches an installer (sub-process) that makes use of the information. Another example is the Microsoft™ installer, which runs under a service model; the subsystem copies files and creates registry entries. These are only examples. There are a number of different reasons and programming styles that may cause the installer 174 to be divided into multiple sub-processes. The sub-processes may or may not be installers themselves. For example, a sub-process could be invoked by the installer 174 or the sub-process could be invoked directly. A technique is provided herein that enables tracking of activities of the installer 174 and sub-processes of the installer 174. An example of a multi-process installer is described later with reference to
The interception-based resource detection program 172 can be logically divided into functional modules. For example, the interception-based resource detection program 172 may include an interception module 178, an application installer execution module 180, a recording module 182, a verification module 184, a parsing module 186, and a streaming application creation module 188.
In an embodiment, the interception module 178 is started prior to executing the installer 174. In an alternative, the interception module 178 could be started at the same time as, or after, the installer 174. The interception module 178 operates in runtime.
The application installer execution module 180 may provide a portion of an environment in which to execute the installer 174. In an embodiment, the interception-based resource detection program 172 provides at least part of the environment. In another embodiment, some or all of the application installer execution module 180 is provided by an operating system or a program for executing application installers, such as the installer 174. In an embodiment, the application installer execution module 180 includes a GUI in which a user may indicate that the installer 174, for example, is to be executed. The application installer execution module 180 then launches the installer 174.
While the installer 174 is running, interceptors associated with the interception module 178 capture calls made by the installer. The calls may include file system, registry, and other calls. It should be noted that the interception of calls may be accomplished by, for example, changing offset values or using a file system hook technique. These techniques are well-known in the art so a detailed description of interception techniques is omitted.
As depicted in
Referring once again to
Referring once again to
The verification module 184 takes over when the installer 174 finishes. It should be noted that the installer 174 may finish before sub-processes or system services finish. In this case, the verification module 184 should not begin until all sub-processes and system services finish. To this end, the verification module 184 may prompt a user to indicate when the installation is complete. Alternatively, the verification module 184 may check to determine that all processes spawned by the installer are finished. In any case, when the installer 174 (and other processes, if applicable) finishes, the interception module 178 turns of the interceptors. The verification module 184 then checks, for example, a logfile to determine whether any errors or notes were recorded by the recording module 182. If the logfile contains entries, the user may be prompted to indicate how to proceed, which may include aborting, restarting, or reconfiguring the installation. If the logfile is empty, the verification module 184 may, for example, delete the logfile.
The parsing module 186 parses the tracefiles to produce streaming application files. The parsing module 186 is optional because the recording module 182 could instead dynamically update registry values and files. However, in an embodiment, the recording module 182 maintains trace files. The parsing module 186 steps through the tracefiles and obtains a value for each path. The parsing module 186 assumes that if a file or registry value cannot be found, it has been deleted. For example, if the installer 174 creates a file, modifies the file, then deletes the file, the tracefile may still include a path to the file. Later, when the parsing module 186 reaches the path associated with the delete, the assumption can be verified. Once the parsing module 186 has stepped through the tracefiles, redundancies and inconsistencies should be reduced or eliminated and the record includes registry values and files. The files may be organized in a list.
A streaming application creation module 188 may use the record to create a streaming application that facilitates streaming of one or more applications that are associated with the installer 174. In an embodiment, the streaming application includes a token file (e.g., a .tok file) and a stream file (e.g., a .stc file). The streaming application may also include a text file (e.g., a .txt file). The streaming application creation module 188 may create and encode the token file. The token file includes paths to various resources. The token file may be thought of as containing the information necessary to trick a computer that is receiving a streaming application into believing it has all of the resources it needs to run the application. The streaming application creation module 188 may create and process (e.g., compress or encrypt files) the stream file. The stream file includes a series of blocks. The blocks are processed from a list of files that are segmented into blocks. When streaming an application to a computer, the computer may need some of the blocks at any given time. If the computer needs an additional block, the computer may request the additional block from a server and the server will provide the additional block from the stream file. A .stw file may also be created that includes a copy of the record. The .stw file can be merged with subsequent installations of updates or other applications, as described with reference to
Referring once again to
The flowchart continues at block 216 with executing an application installer. The application installer is associated with one or more applications. The application installer may be executed from within a window or shell associated with the detection program. For example, a user may be prompted to select an application installer to execute from within a GUI associated with the detection program.
Referring once again to
The flowchart continues at block 220 with creating a record of the resources associated with the application installer. The resources associated with the application installer may be determined from the calls or other activities associated with the application installer. The record may include files installed and registry keys created.
The flowchart continues at block 222 with parsing the record. Parsing the record may be accomplished by a parsing module, such as the parsing module 186 (
As depicted in
If, for example, the files option is selected, then a view such as depicted in
If, for example, the registry option (
If, for example, the project setting option (
In the application information pane, general information about a title may be specified. This information may be stored within the record (e.g., a .stw file) and may be used to track processed titles. Some of the information may also be used to generate stream and token files, as described later. The short name is used in naming the token and stream files and the short name determines the title name the end user sees on a software player, as described later. The information may also be used to create an application install file for a server, as described later. Most of this information may come from the publisher of the application, but Program Description (text) field may include comments about the application that may, for example, be entered by a processing organization. This information may or may not be included in the record for informational purposes only (e.g., the information would not be used to generate a stream file). This information may also be pulled into a database to manage the processed applications.
In the application launch pane (
In the operating system support pane (
In the required system components pane (
Referring once again to
The flowchart continues at decision point 226 with determining whether an update exists. If an update exists (226-Y), then the flowchart continues at optional block 228 with executing an update installer and continues from block 218 as described previously. Block 228 is optional because updates are not necessary. It should be noted that the system may or may not include an application record (e.g., a .stw file) that includes data from the installation of the application to be updated. In this example, at block 224, creating a streaming application involves merging the stored record with a new record associated with the update installer. Any number of updates, patches, or other applications may be incorporated into the streaming application in this manner.
Referring once again to
The flowchart ends at optional block 232 with testing the streaming application. Block 232 is optional because testing is optional (though recommended). When testing, a user may execute the .tok file to start a software player and the associated application. The application can be tested to verify that it works correctly. The application may then be jumpstarted.
Jumpstarting is a process of specifying which stream blocks of the application need to be in a streaming software player cache before the application starts to run. A variable amount of data may be cached for jumpstarting. In general, if a relatively large amount of data is pre-cached, first-run start times tend to be faster and later delays as blocks are loaded on demand tend to be reduced. Note that the second time the application is run, unless flushed from the cache, application start-up times may be faster given that the application is loaded from the disk cache.
The flowchart continues at block 236 with merging the jumpstart data into a record associated with the streaming application. For example, the jumpstart data may be stored in a .stj file. A .stw may include the record of the streaming application that can be used to generate a streaming application. At block 236, the .stj file is merged with the .stw file to create a new record (e.g., a new .stw file). The new .stw file may be used to generate a new streaming application (e.g., a new .tok, .stc, and .txt file). The new streaming application is configured to ensure that a computer to receive the streaming application first downloads the jumpstart, as described previously.
The flowchart continues at decision point 238 with determining whether additional jumpstarts are desired. If so, the flowchart returns to block 234 and continues from there. In an embodiment, one or more additional jumpstarts may be created to improve streaming performance. An additional, or secondary, jumpstart may facilitate improved performance after the streaming has begun. For example, in the context of games the first, or primary, jumpstart may download blocks used in “Level One” of the game. When the streaming of the game begins, the computer can download blocks used in later parts of the game in the background while a player conquers “Level One”. This can improve performance of streaming after the initial jumpstart period.
When all jumpstart data has been generated and merged, the flowchart ends.
While this invention has been described in terms of certain embodiments, it will be appreciated by those skilled in the art that certain modifications, permutations and equivalents thereof are within the inventive scope of the present invention. It is therefore intended that the following appended claims include all such modifications, permutations and equivalents as fall within the true spirit and scope of the present invention; the invention is limited only by the claims.