Abstract:
An application for updating, distributing, and rendering an application feature set and application versions is disclosed. The application component allows multiple versions of similar applications to be installed and upgraded on the same computer. Meanwhile, allowing new product levels downloads to transform an existing product into a different product.

Description:
FIELD OF THE INVENTION 
   Aspects of the present invention relates to updating, distributing, and rendering an application feature set and application versions. More specifically, aspects of the present invention relate to application components that allow multiple versions of similar applications to be installed and upgraded on the same computer. 
   BACKGROUND OF THE INVENTION 
   Some software developers distribute their software application to users in a compact disk (CD). Upon installation, users are prompted for a product key number. Depending upon the product key number entered, a different version or level of the software product is installed on the user&#39;s machine. If in the future the user wishes to change product levels, the product must be uninstalled and the appropriate product level or version re-installed. This process unnecessarily consumes time. 
   Furthermore, once the software application is installed, additional features can not be easily added or removed. Installing new features typically requires downloading entire, new files to replace or supplement existing files. Downloading entire files unnecessarily consumes both time and bandwidth. 
   Therefore, there is a need in the art for an application that allows users to more quickly download feature set updates. There is also a need in the art for an application component that allows multiple, different versions or levels of the same software product to be installed on the same computer without requiring a separate installation of application files for each version or level. 
   BRIEF SUMMARY OF THE INVENTION 
   Aspects of the present invention address one or more of the issues mentioned above, thereby allowing multiple installations of applications within the same product family to coexist on a computer. Various aspects of the invention allow an application to control the feature set displayed to the user by using a user&#39;s subscription level, user installation table, and/or application initialization context. Various aspects of the invention permit binary patch files to be downloaded and applied to application files on the user&#39;s machine. Thus, permitting an application to be converted from one product to another product, or converting the application from one product level to another product level. Aspects of the invention include various remote computing device for authenticating a user of the application, providing manifest information, and providing binary patch files. The invention may be implemented in a computer-readable medium containing computer-executable instructions for updating, distributing, and rendering an application feature set for application versions and levels. 

   
     BRIEF DESCRIPTION OF THE DRAWINGS 
     The present invention is illustrated by way of example and not limited in the accompanying figures in which like reference numerals indicate similar elements and in which: 
       FIG. 1  shows an illustrative distributed computing system operating environment that may be used to implement aspects of the invention; 
       FIG. 2  illustrates a method of restricting user access to a product feature set or product level in accordance with various embodiments of the invention; 
       FIG. 3  illustrates a method for updating the subscription level for a user in accordance with various embodiments of the invention; 
       FIG. 4  illustrates a method for updating the application files on computing device  102  in accordance with various embodiments of the invention; 
       FIG. 5  illustrates the steps for updating the application files on computing device  102  at application shutdown or exit, in accordance with various embodiments of the invention; 
       FIG. 6  illustrates the steps for updating the application files on a computing device upon installation of an application in accordance with various embodiments of the invention. 
       FIG. 7  illustrates the steps for updating the application files on a computing device upon removal of an application in accordance with various embodiments of the invention. 
       FIG. 8  illustrates a computing device for updating an application feature set, in accordance with various embodiments of the invention. 
   

   DETAILED DESCRIPTION OF THE INVENTION 
     FIG. 1  illustrates an example of a suitable operating environment  100  in which aspects of the invention may be implemented. The operating environment  100  is only one example of a suitable operating environment and is not intended to suggest any limitation as to the scope of use or functionality of the invention. Other well known computing systems, environments, and/or configurations that may be suitable for use with the invention include, but are not limited to, personal computers, server computers, hand-held or laptop devices, multiprocessor systems, microprocessor-based systems, programmable consumer electronics, network PCs, minicomputers, mainframe computers, distributed computing environments that include any of the above systems or devices, and the like. 
   Aspects of the invention may be described in the general context of computer-executable instructions, such as program modules, executed by one or more computers or other devices. Generally, program modules include routines, programs, objects, components, data structures, etc. that perform particular tasks or implement particular abstract data types. Typically the functionality of the program modules may be combined or distributed as desired in various embodiments. 
   Suitable operating environment  100  may include at least some form of computer readable media. Computer readable media can be any available media that can be accessed by computers or other devices. By way of example, and not limitation, computer readable media may comprise computer storage media and communication media. Computer storage media includes volatile and nonvolatile, removable and non-removable media implemented in any method or technology for storage of information such as computer readable instructions, data structures, program modules or other data. Computer storage media includes, but is not limited to, RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, digital versatile disks (DVD) or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium which can be used to store the desired information and which can accessed by computers or other devices. Communication media typically embodies computer readable instructions, data structures, program modules or other data in a modulated data signal such as a carrier wave or other transport mechanism and includes any information delivery media. The term “modulated data signal” means a signal that has one or more of its characteristics set or changed in such a manner as to encode information in the signal. By way of example, and not limitation, communication media includes wired media such as a wired network or direct-wired connection, and wireless media such as acoustic, RF, infrared and other wireless media. Combinations of the any of the above should also be included within the scope of computer readable media. 
   A computing device  102  may operate in a networked environment using logical connections to one or more remote computing devices  106 ,  110 . The remote computing devices  106 ,  110  may be personal computers, servers, routers, network PCs, peer devices or other common network nodes. The logical connections  104  depicted in  FIG. 1  include a local area network (LAN) and a wide area network (WAN), but may also include other networks. Such networking environments are commonplace in offices, enterprise-wide computer networks, intranets, and the Internet. Aspects of  FIG. 1  will be discussed throughout the discussion below. 
     FIG. 2  illustrates a method of restricting access to a product feature or product level on a computing device  102  in accordance with various embodiments of the invention. First, an application on computing device  102  may be initiated in step  200  by a user or automatically initiated by software. Next, a value in the computing device  102  may be read in step  202  to determine which feature set to render to the user. This value may represent a user&#39;s subscription level, application initialization context, and/or feature set installed on the computing device  102 . According to this value, a feature set may be rendered or restricted in step  204  from the user. 
   In accordance with various embodiments of the invention, the subscription level for the user may be a value that indicates the greatest product level and/or feature set accessible to the user. For example, if the user purchased MICROSOFT® MONEY standard edition, the subscription level for the user might be ‘1’. If the user purchased MICROSOFT® MONEY deluxe edition, the subscription level for the user might be ‘2’. The product level may relate to the standard and deluxe editions of the product. In various embodiments there may be a one-to-one relationship between feature set and product level. For example, a product level value of ‘1’ may correspond to features A, B, and C, while a product level value of ‘2’ may correspond to features A, B, C, and D. Meanwhile, in various embodiments of the invention, product level may relate to product releases or versions. In another example, if the user purchased MICROSOFT® WORD, the subscription level for the user might be ‘2’. If the user only purchased MICROSOFT NOTEPAD™, however, then the user&#39;s subscription level might be ‘1’. One of skill in the art will appreciate that the value of the subscription level for the user need not be limited to a numerical or integer value. In various embodiments the subscription level for the user may be stored in an encrypted form in the registry of a computing device  102 . 
   Moreover, one skilled in the art will appreciate that product levels or subscription levels may be organized in various ways. For example, levels may be organized hierarchically, where all higher levels are supersets of lower levels. For example, a subscription level of ‘1’ may be assigned features A, B, and C. Meanwhile, a greater subscription level of ‘2’ may then correspond to all the features in subscription level ‘1’ plus additional features D, E, and M. In another example, the feature set assigned to a particular subscription level may be changed. For example, feature A may be removed from subscription level ‘1,’ or feature N may be added to subscription level ‘1.’ In addition, feature A may be replaced with feature N in a given subscription level. One of ordinary skill in the art will realize that the invention is not limited in the way subscription levels and features are organized or structured. 
   In accordance with various embodiments of the invention, the application initialization context may be used to indicate from where the user initialized the application. For example, if the MICROSOFT® MONEY application was invoked from the start menu, then the value of the application initialization context might be different from what it would have been if the application was invoked from a web browser. Likewise, the value of the application initialization context may also be different if the application was invoked from an icon for the standard edition of MICROSOFT® MONEY, rather than from an icon for the deluxe edition of MICROSOFT® MONEY. At least one advantage of aspects of the invention is that it allows multiple product level or versions of similar applications to co-exist on a single computing device, such as computing device  102 . 
   In accordance with various embodiments of the invention, a representation of the feature set installed on a computing device  102  may be maintained in a user installation table. In various embodiments the user installation table may be stored in the registry of the computing device  102  and may be encrypted. The encryption key may be randomly generated and unique to an installation or device. This unique key may be stored in computing device  102  and used to validate the integrity of installation table. The user installation table may be comprised of the installed product level and feature set available on the computing device  102 . One skilled in the art will appreciate that once identified and, if appropriate, decrypted, the value stored in the registry might reveal the various product levels and feature sets available on the computing device  102 . Furthermore, one skilled in the art will recognize the various forms of encryption, such as public-key encryption, that may be implemented with various embodiments of the invention. In various embodiments, the user may not have access rights to each feature and product level listed in the user installation table. For example, a particular feature set of a product may be disabled for a user in a particular country or locale. In another example, a particular feature set may be customized for a given user, group of users, or product level. The feature set may be represented by a series of binary values (i.e., 0 or 1) to represent a feature being active or disabled. 
     FIG. 3  illustrates a method for updating a user&#39;s subscription level on a computing device  102  in accordance with various embodiments of the invention. After initiating an application in step  200 , a user may be authenticated in step  302  with a remote computing device  110 . In step  302 , the user may be authenticated manually or automatically. The remote computing device  110  may be a MICROSOFT® passport server, or any other authentication device known to those skilled in the art. One skilled in the art will appreciate that step  302  of authenticating the user with a remote computing device  110  can occur anytime prior to, during, or after initiating an application in step  200 . In addition, one skilled in the art will appreciate that step  302  of authenticating the user with a remote computing device  110  may include, in various embodiments, the step of independently downloading information from remote computing device  110  at an earlier time, and subsequently using that information to assist in authenticating the user. 
   Next in step  304 , the value of the user&#39;s subscription level, which might be stored on a remote computing device  110 , may be compared to the value of the subscription level for the user stored on the computing device  102 . If the values match, the subscription level for the user has not changed. If the values do not match, then a subscription level for the user stored on the computing device  102  may be updated in step  306  with a value stored on the remote computing device  110 . For example, if the user of the standard edition of MICROSOFT® MONEY recently made a purchase of the deluxe edition of MICROSOFT® MONEY, the value of the user&#39;s subscription level stored on the remote computing device  110  might be changed from ‘1’ to ‘2’. Assuming the user has not authenticated with a remote computing device  110  since the purchase, the value of the user&#39;s subscription level on the computing device  102  might still be ‘1’. After step  302 , the value of the user&#39;s subscription level stored on the computing device  102  may be updated to ‘2’. Among the various advantages of this method, this method prevents a potential security breach because the value of the user&#39;s subscription level on a computing device  102  will be reverted to the actual value stored on the remote computing device  110 . Thus, preventing the user from accessing a restricted feature set of a product. 
   In another example, the user&#39;s subscription level may not be stored on the computing device  102 . Rather, the user&#39;s subscription level may be stored on a remote computing device  110 . Then, the user&#39;s subscription level might be used to regulate modifications to the user installation table on the computing device  102 . The user may be prevented from inserting an entry in the user installation table that corresponds to a product level greater than the user&#39;s subscription level. For example, if a user&#39;s subscription level was ‘1’, then the user may not be allowed to access an installation of MICROSOFT® MONEY deluxe edition because the product level for MICROSOFT® MONEY deluxe edition may correspond to ‘2’. Also for example, if a user&#39;s subscription level was ‘2’ and the computing device  102  had an installation level of ‘1,’ then in various embodiments, the installation level on the computing device  102  might be upgraded with additional features. 
   Furthermore, notice that in various embodiments, the files for the deluxe edition of a product may already exist on the computing device  102 , but the user may still be prohibited from accessing these features. One skilled in the art will appreciate that in various embodiments it may be desirable to allow user limited access to features that are have not been fully installed on the computing device  102 . For example, a user of computing device  102  may be notified that features for which he has already paid a fee, or for which he could purchase, will be available soon, or are available for a trial period. 
   Finally, when the values of the user&#39;s subscription level on the remote computing device  110  and the computing device  102  do not match, in step  308 , an automatic update of files on the computing device  102  may be initiated. Whether an automatic update  308  is initiated may depend on whether the user installation table on the computing device  102  already contains the product level and feature set for the user&#39;s subscription level. 
   For example, in accordance with various embodiments illustrated in  FIG. 4 , after the user is authenticated in step  302 , a manifest may be downloaded  402  from a remote computing device  106 . One skilled in the art will appreciate that the manifest may be downloaded from other devices, such as remote computing device  110 , so long as that device contains and can distribute the appropriate manifest information. In various embodiments, the manifest may be comprised of one or more filenames, one or more hash values, and one or more cab filenames. One skilled in the art will appreciate that the manifest is not limited to these examples, and may include other information including, but not limited to, one or more path file combinations, or a base from which to create a target file. The manifest may correspond to the user&#39;s subscription level. For example, if the user has a subscription level corresponding to the deluxe edition of MICROSOFT® MONEY, then the downloaded manifest might contain the filenames for the product level&#39;s feature set. For each file, the manifest may also contain the hash value of the file&#39;s contents. One skilled in the art will appreciate that a manifest need not be limited to a hash value. For example, a manifest may include a filename with the relative path, the filesize in bytes, or the filename of a binary patch file, if available. For example, a manifest may be comprised of information that can be used to verify the contents of a file, 
   Next, in step  404 , hash value(s) from the manifest may be compared to the hash value(s) of corresponding files on the computing device  102 . Those skilled in the art will appreciate that although various embodiments are described using hash values, comparable verification information could also be used in these embodiments. For those files which have a different hash value, the binary difference between the files may be downloaded in step  406  from a remote computing device  106 . While the download is being performed, a status flag on the computing device  102  may be set in step  406  to indicate that a download is in progress. Those skilled in the art will appreciate that a download or automatic update can be initiated in various ways. For example, the download can be immediate or can be set to occur in the background using services such as MICROSOFT® Background Intelligent Transfer Service. In another example, the application on the computing device  102  may compile the names of all patch files that need to be downloaded into a queue of names for sequential downloading. 
   In various embodiments of the invention, the remote computing device  106  might maintain a binary difference between some of the files that could be migrated. The binary difference patch files may contain statically linked libraries that contain a superset of the information between other patch files. Thus, applying the appropriate patch file might cause a user&#39;s installation of MICROSOFT® MONEY standard edition to be transformed into MICROSOFT® MONEY deluxe edition. As a result, product libraries on the computing device  102  might be converted into new libraries. At least one advantage of simply downloading a compressed, binary file difference instead of an entire file is that bandwidth may be conserved. If the remote computing device  106  does not contain the appropriate binary difference patch file, the whole file may be provided for download in a compressed form. The name of the whole file may correspond to a cab filename in the manifest information. 
   After downloading in step  406 , the patch files may be applied in step  408  to the product files on the computing device  102 . In addition, the user installation table may be updated in step  408  to indicate the product level and feature set currently installed on the computing device  102 . In accordance with various embodiments of the invention, the binary patch files may be applied to the computing device  102  when the initiated application is shutdown in step  502 . At that time the manifest may be again compared, in step  504 , with the files existing on the computing device  102 , and the presence of all the downloaded binary patch files may be verified. After verification, the patch files may be applied, in step  506 , to the files on the computing device  102 . In various embodiments, an encryption key may be generated when a downloaded binary patch file is updating a file containing said key. In various other embodiments, the encryption key need not be regenerated. The status flag may also be cleared in step  506 . In various embodiments of the invention, the user may be prompted to authenticate with a remote computing device  110 . In the alternative, a user may be allowed to download the binary patch files free-of-charge and without authenticating. At least one advantage to this is that a remote computing device  106  might freely provide patch files and manifest information without the added step of user authentication. The user, however, may be unable to access the functionality in the binary patch files until the user&#39;s subscription level has been updated accordingly. 
     FIG. 6  illustrates the steps for updating the application files on a computing device  102  upon installation of an application in accordance with various embodiments of the invention. At installation time, the application might compare in step  602  the value of the highest product level and/or feature set installed on the computing device  102  for that product with the product level and/or feature set of the file to be installed. In various embodiments of the invention, the value of the highest product level and/or feature set may be stored in the user installation table. In various embodiments, if the computing device  102  already contains a greater product level and feature set, then the installation is aborted. Otherwise, the installation will proceed to update the user installation table and install the files, in step  604 , on the computing device  102 . Meanwhile, in various embodiments the download and/or installation is performed by an application module  802  and/or patch download module  810 . These modules may be able to recognize the a subscription level&#39;s feature set and update model to efficiently update and/or download the files (or portions of files) onto the computing device  102 . The user installation on the computing device  102  may be updated with an encryption key. 
     FIG. 7  illustrates the steps for updating the application files on a computing device  102  upon un-installation (or removal) of an application in accordance with various embodiments of the invention. At removal time, the application might remove, in step  702 , any entries in the user installation table corresponding to the product level and/or feature set being removed from the computing device  102 . In various embodiments, the application files on the computing device  102  may not be updated or removed until the next time the user is authenticated with the remote computing device  110 . In various embodiments, if the application being removed is the last of the product installed on the computing device  102 , then all application files and settings may be removed immediately in step  704 . 
     FIG. 8  illustrates an example of a device for updating an application feature set, in accordance with various aspects of the invention. The figure illustrates only one example of a suitable device and is not intended to suggest any limitations as to the scope of use or operation of the invention. A suitable device might contain a processing unit and memory unit. An application  802  in accordance with various aspects of the invention might be stored in a memory unit and run on a processing unit. For example, a device such as computing device  102  may provide a suitable operating environment for the application  802 . 
   An application  802  configured in accordance with aspects of the invention is comprised of various modules for performing tasking related to updating and rendering an application feature set. For example, the application  802  may read one or more values from the user installation table  804  using the installation table module  818 . The installation table module  818  might use these values to determine which application features to render to the user. The installation table module  818  may reside in a memory unit in an encrypted form. 
   The user installation table  804  may reflect the status of files for an application on a computing device, such as computing device  102 . For example, when files relating to the application are updated, the user installation table  804  may be revised to reflect these updates. One skilled in the art will recognize that updating includes, but is not limited to, installing, updating, and removing files. In various examples, the user installation table  804  may not be updated until the user has been authenticated by the authentication module  812 . At least one advantage of this is that it prevents a user from installing and/or operating features, versions, or levels of an application for which he does not have an adequate user&#39;s subscription level. In an alternative example, the user installation table  804  may be updated without user authentication. Meanwhile, the user is granted access to only those features, versions, and levels of an application for which he has an adequate user&#39;s subscription level. 
   The authentication module  812  may read values from the user&#39;s subscription level  806 . The user&#39;s subscription level may be encrypted. The user may also be prompted for a password prior to being allowed to access the user&#39;s subscription level  806 . One skilled in the art will appreciate that the user&#39;s subscription level may be stored in a memory unit on the device or on a remote computing device, such as remote computing device  110 . 
   Manifest information  808  about files relating to an application may be downloaded from a remote computing device  106  using the manifest module  816 . In one example, the manifest module  816  transmits information such as filename and/or user&#39;s subscription level and receives manifest information  808 . The manifest module  816  processes the manifest information  808  to determine which application files should be updated. These files are updated by the patch download module  814 . The patch download module  814  may download the binary patch file  810  stored on a remote computing device  106  and update the application feature set. The binary patch file  810  may be a portion of a file, such as a binary difference patch file, or may be an entire file if no binary patch can be found. In one example, the manifest information  808  and binary patch file  810  may be stored on the same remote computing device  106 . In another example, the manifest information  808  and binary patch file  810  may be stored on different computing devices, such as computing device  102  or remote computing device  110 . 
   The present invention has been described in terms of exemplary embodiments thereof. Numerous other embodiments, modifications and variations within the scope and spirit of the appended claims will occur to persons of ordinary skill in the art from a review of this disclosure.