Abstract:
A client computer sends application information about a software application to a server system. The server system performs a comparison between the application information about the software application and the most-updated upgrade package for the software application. The most-updated upgrade package for the software application is stored in a part database. The most-updated upgrade package for the software application is received by the client system automatically when the comparison indicates that the most-updated upgrade package has not been installed on the client system. A client database stores a plurality of configuration files for a plurality of client systems. A first configuration file provides the sever system with the knowledge of the software applications installed on the client system. The application information about the software application comprises version information of the software applications and is stored in a database in the client system.

Description:
RELATED APPLICATIONS 
       [0001]    The present application is a continuation of U.S. patent application Ser. No. 11/111,292, filed on Apr. 20, 2005, which is a continuation of U.S. patent application Ser. No. 10/869,591, filed on Jun. 15, 2004, now issued as U.S. Pat. No. 7,171,660, which is a continuation of U.S. patent application Ser. No. 09/580,931, filed on May 25, 2000, now issued as U.S. Pat. No. 6,751,794. These patent applications are hereby incorporated by reference. 
     
    
     FIELD OF THE INVENTION 
       [0002]    The present invention relates generally to field of remote support for computer systems. More specifically, the present invention is directed to a method and an apparatus for updating software in a plurality of computer systems. 
       BACKGROUND 
       [0003]    Personal computers have become an important part of the information age. The use of the personal computers has expanded beyond the traditional university campus and large office environments. Today, many small businesses and residences have at least one personal computer running a wide range of applications sold by many different software vendors. 
         [0004]    As the applications become easier to use, the personal computers are no longer considered the tool for only the technical users. The user community has expanded and the personal computers are being viewed more as the tools to run the applications. Most users are interested in dealing with the applications and usually have no clue when something goes wrong with their personal computers. When the user is unable to use the application on the user&#39;s personal computer, the usual action is to take the personal computer to a local personal computer repair shop. 
         [0005]    Since there are many different brands of personal computers such as, for example, IBM, Compaq, Gateway, Dell, etc., it is usually the case that each personal computer from a different brand may have a different set up. For example, the IBM personal computer may use a different video adapter from the Dell personal computer, among others. As such, to have a problem corrected, the user usually has to bring the personal computer into the repair shop so that the technician can isolate the problem. 
         [0006]    One of the most common problems of application failure is incompatibility. The incompatibility may be related to the hardware or to the other applications in the same personal computer system. For example, the user may have installed a new application that is incompatible with the existing application when running together. The user may have installed a new hardware adapter that is incompatible with the existing application without installing a necessary update. Often the identification of the incompatibility occurs at a most unfortunate time such as, for example, prior to the user having an opportunity to save the work in progress. This experience is frustrating, time consuming and can be costly for the user. 
       SUMMARY OF THE INVENTION 
       [0007]    A client computer sends application information about software applications on the client computer to a server system. The server system performs a comparison between the application information about the software application and the most-updated upgrade package for the software application. The most-updated upgrade package for the software application is stored in a part database. The most-updated upgrade package for the software application is received by the client system automatically when the comparison indicates that the most-updated upgrade package has not been installed on the client system. A client database stores a plurality of configuration files for a plurality of client systems. A first configuration file provides the sever system with the knowledge of the software applications installed on the client system. The application information about the software application comprises version information of the software applications and is stored in a database in the client system. 
     
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         [0008]    The present invention is illustrated by way of example in the following drawings in which like references indicate similar elements. The following drawings disclose various embodiments of the present invention for purposes of illustration only and are not intended to limit the scope of the invention. 
           [0009]      FIG. 1  is a network diagram illustrating one embodiment of components connected in a network that can be used with the method of the present invention. 
           [0010]      FIG. 2  is a flow diagram illustrating one embodiment of an update process. 
           [0011]      FIG. 3  is another flow diagram illustrating one embodiment of the update process. 
           [0012]      FIG. 4  is an exemplary tool bar that can be used with one method of the present invention. 
           [0013]      FIG. 5  is an exemplary diagram illustrating a relationship between a server connection point, a customer data base and a part data base. 
           [0014]      FIG. 6  is an exemplary diagram illustrating a communication protocol between a client system and the server through the Internet network. 
           [0015]      FIG. 7  illustrates one embodiment of a computer-readable medium containing various sets of instructions, code sequences, configuration information, and other data used by a computer or other processing device. 
       
    
    
     DETAILED DESCRIPTION 
       [0016]    A method and apparatus for remotely updating software in a plurality of computer systems is disclosed. In the following description, for purposes of explanation, specific nomenclature is set forth to provide a thorough understanding of the present invention. However, it will be apparent to one skilled in the art that these specific details are not required in order to practice the present invention. 
         [0017]    Some portions of the detailed descriptions that follow 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. 
         [0018]    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&#39;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. 
         [0019]    The present invention 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. 
         [0020]    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 operations. 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. It will be appreciated that a variety of programming languages may be used to implement the teachings of the invention as described herein. 
         [0021]    In one embodiment, the method disclosed in the present invention allows for better remote support of users of client systems in the network. A server provides update information to multiple client systems connected in a network. When necessary, the updates are retrieved from a central depository, sent to the appropriate client systems and automatically update the applications. In one embodiment, the client systems are IBM-compatible personal computers running in the Window environment such as, for example, Windows 98, Windows 2000, etc. The server and the client systems are connected in a network such as, for example, the Internet. By keeping the client systems updated, remote support can be efficiently performed to minimize the down time of the client systems. Each client system comprises of multiple installed software packages. The software packages may have been previously installed on the client system prior to delivery to a user. The software may include, for example, application software, device drivers, etc. 
         [0022]      FIG. 1  illustrates an exemplary embodiment of the update network. A server  105  maintains a client database  125  to keep track of the client systems  110 ,  115 . For example, whenever a client system  110  or  115  communicates with the server  105 , the server  105  already knows about the installed software on that client system  110 ,  115 . The server  105  also maintains a part database  120  containing software patches and software updates to help keeping the client systems  110  and  115  up to date. The client database  125  allows the server  105  to know about the configuration of the client systems  110  and  115 . The client database  125  and the part database  120  may be in the same database server or in separate database servers connected in the network  130 . Alternatively, the client database  125  and the part database  120  may be in the same system as the server  105 . In one embodiment, the server  105  serves as a central point for receiving update requests from the client systems  110  and  115  and for retrieving information from the databases  125  and  120  to satisfy the update requests. 
         [0023]      FIG. 2  is a flow diagram  200  illustrating one embodiment of an update method. At block  205 , an update request is generated by the client system  110 ,  115  and sent to the server  105 . The update is performed on a periodic basis, such as, for example, every 24 hours. Alternatively, the update may be performed at any time by the user sending an update request to the server  105  on the network. The server  105  knows each client system  110 ,  115  by a unique identification associated with the client system  110 ,  115 . 
         [0024]    In one embodiment, the server  105  accesses a client database  125  containing information about the client system  110 ,  115 . The client database  125  may include information, such as, for example, installed software packages on the client system  110 ,  115 , the operating system installed on the client system  110 ,  115 , etc. However, what the server  105  may not know is whether these installed software packages are up to date. For example, the user of the client system  110 ,  115  may have changed the configuration parameters of the software packages, or the user may not have requested for an update for an extended length of time due to the client system  110 ,  115  not being connected to the network  130 . 
         [0025]    In one embodiment, the client system  110 ,  115  may need to do a self-check and send its current software configuration to the server  105 . A self-check may be done by the server  105  directing the client system  110 ,  115  specifically what to check for and the information to be collected from the client system  110 , 115 . This information is the sent to the server  105 , as shown in block  210 . Based on this information, the server  105  checks its part database  120  and determines the updates that the client system  110 ,  115  needs. The updates are sent from the server  105  to the client system  110 ,  115 , as shown in block  215 . The updates may be sent with instructions from the server  105  that tells the client system  110 ,  115  what to do to have the updates installed, as shown in block  220 . 
         [0026]      FIG. 3  is another flow diagram illustrating one embodiment of an update method  300 . In one embodiment, a utility program executed by the client system  110 ,  115  communicates with the server  105  for information to check on the client system  110 ,  115 . The execution of this utility program may be initiated by the user or it may be automatic. The utility program is herein referred to as a patch checker. The patch checker initiates the request to have the applications verified for any necessary updates. The request is sent to the server  105  along with the unique identification number of the client system  110 ,  115 . The server  105  uses the client identification number to check against the client database  125  for authentication. In one embodiment, the database contains configuration information about the client system  110 ,  115 . The server  105  retrieves the configuration information for the client system  110 ,  115 , generates a script file and sends the script file to the client system  110 ,  115 , as shown in block  305 . In one embodiment, the script file contains commands that tell the client system  110 ,  115  the functions to perform. For example, the commands may direct the client system  110 ,  115  to perform self-check functions. The self-check functions may have the following parameters: 
         [0027]    ‘v: filename’ get the file&#39;s version 
         [0028]    ‘m: filename’ get the file&#39;s modified date 
         [0029]    ‘d: driveletter’ get amount of free disk space 
         [0030]    ‘r: keyname’ get the value of the specified registry key 
         [0031]    ‘s: filename’ get the size of the file. 
         [0000]    In one embodiment, the commands are executed by the client system  110 ,  115  to collect information pertinent to the applications currently installed on the client system  110 ,  115 . 
         [0032]    The script file may contain a list of parts that the server  105  thinks the client system  110 ,  115  has and that the server  105  wants the client system  110 ,  115  to check. The parts may be the names of the applications and the server  105  may want the client system  110 ,  115  to collect the current version information about the applications. In one embodiment, in order to keep the information in the client database  125  accurate, the user may not want to alter the configuration of the applications that are to be supported remotely by the server  105 . Keeping the client system  110 ,  115  and the information in the client database  125  synchronized may help making the update process by the server  105  more efficient. 
         [0033]    In block  310 , using the script information sent by the server  105 , the patch checker parses the server&#39;s commands to check the software parts on the client system  110 ,  115 . The appropriate information about these software parts is collected. In one embodiment, the version of each software part is collected and sent to the server  105 , as shown in block  315 . The server  105  uses the information collected from the client system  110 ,  115  and compares it with a part database  120 . For example, the server  105  may check the version number collected from the client system  110 ,  115  with the version of the same software part in the part database  120 . In one embodiment, the server  105  may want to get the most updated version distributed to the client system  110 ,  115 . 
         [0034]    When the version information collected from the client system  110 ,  115  is not at the same level with the version of the same software part in the part database  120 , the most updated version is retrieved from the part database  120 . When the version information from the client system  110 ,  115  is already up to date, there is nothing to download. In block  320 , the patch checker asks the server  105  for the files associated with the updated versions of the software to download. The files are downloaded from the server  105  to the client system  110 ,  115  in block  325 . In one embodiment, each download file is associated with an uniform resource locator (URL). The server  105  replies to the update request by sending the patch URL. 
         [0035]    There may be one or more download files for each software to be updated, and there may be more than one software that needs to be updated, the server  105  may send several down load files to the client system  110 ,  115 . The download files may be stored in a predefined directory such as, for example, the download directory. Each download file is processed individually, as shown in block  330 . In one embodiment, the download files are received from the server  105  in a compressed format, such as, the zip format, and need to be uncompressed or expanded, as shown in block  335 . Each download file is expanded into an executable program and multiple related data files. One of the data files is a text file or an instruction file containing a set of instructions or commands that can be parsed by the executable program to perform the update process, as shown in block  340 . For example, the instruction may be one of the following commands: 
         [0036]    Delete a file 
         [0037]    ShellExecute 
         [0038]    ShellExecute with wait 
         [0039]    Registry Change 
         [0040]    Add message to a tool bar 
         [0041]    Kill a particular process 
         [0042]    Ask for reboot 
         [0043]    Force reboot 
         [0044]    Ask user to install now or later 
         [0045]    Ask user to close all programs 
         [0046]    When all of the download files have been expanded and copied into the appropriate directories, the update process is completed. At that time, the user may be given an option of rebooting the client system  110 ,  115  to activate the updated version. Alternatively, the user may continue working with the currently installed version and reboot the client system  110 ,  115  at a later time. 
         [0047]      FIG. 4  illustrates an exemplary tool bar that can be used with the present invention. In one embodiment, the tool bar is a list of dynamic link libraries (DLL) and is always running. Additional functions can be added to the tool bar by adding DLL files. For example, the patch checker can be added to the tool bar  400  by adding a patcher.dll to the tool bar  400 , and a patch checker icon can be displayed. By selecting the patch checker icon, the user can initiate the update process at any time. In one embodiment, the tool bar  400  is also used to display update related messages to the user. 
         [0048]      FIG. 5  is an exemplary diagram illustrating a relationship between a connection point, a customer data base and a part data base. In one embodiment, the server provides a connection point  505  that connects to a customer database  510 . The customer database  510  maintains the state of every client system in the network. The state includes information concerning relevant hardware and software as currently installed on the client system. This information includes, for example, the versions of the installed software applications, the versions of the installed hardware drivers, etc. Additionally, the connection point  505  is also connected to a part database  515 . The part database  515  may contain the different versions of the application software, the DLLs, the hardware drivers, and any other software modules that may be installed on the client system. The server uses the part database  515  to keep the client system up to date. For example, when the client system is identified to have a hardware driver that is not current, the most up-to-date hardware driver is retrieved from the part database  515 . 
         [0049]    In one embodiment, a client part database is maintained in the client system. The client part database contains the versions of the software that are installed on the client system. As additional software is installed on the client system, the client part database is updated accordingly. In one embodiment, when the server wants to know the versions of the software installed on the client system, the patch checker retrieves the version information from the client part database. 
         [0050]      FIG. 6  is an exemplary diagram illustrating a communication protocol between a client system  600  and a server  650  through the Internet network. In one embodiment, the client system  600  has a message queue  605  to store messages that certain application  610 , such as, for example, the patch checker (patcher.dll), wants to send to the server  650 . The user selects the patch checker icon on the tool bar  400  displayed by the tool bar program  620  (dreambar.exe) to execute the patch checker  610 . The message queue  605  is processed periodically, such as, for example, every thirty minutes, while the user is connected to the Internet  690 . When the user is not connected to the Internet  690 , the messages from the patch checker (applications)  610  are stored in the message queue  605 . In one embodiment, the patch checker  610  connects to the server  650  through a message handler  615  (ConPoint.dll). The message handler  615  handles the messages generated by the patch checker  610  including, for example, the request for an update. The message handler  615  sends the message to the server  650 . In another embodiment, the message queue  605  is implemented as a text file located in a message queue directory. 
         [0051]    In one embodiment, the server  650  is implemented with multiple java servlets. A master servlet  655  (AnnexServlet) is used to route all the messages received from the client systems  600  to the other servlets  665 ,  670  on the server  650 . Each of the servlets  660 ,  665 ,  670  handles different type of messages. In one embodiment, as each servlet starts up, the servlet tells the master servlet which type of messages the servlet  660 ,  665 ,  670  handles. The master servlet  655  may be used as the connection point on the server  650 . Each of the servlets  660 ,  665 ,  670  may be used as a worker. For example, the servlet  660  is the patch worker handling the update messages from the patch checker  610 . The patch worker  660  sends the script file to the patch checker  610 . The script file is used by the patch checker  610  to check the client system  600 . When the patch checker  610  requests for the download, the patch worker  660  accesses the part database  665  to retrieve the necessary software versions for the client system  600 . It will be apparent to one skilled in the art that there may be other workers (servlets) on the server  650 , such as, for example, a buildworker to add a new client system to the client database, a viewworker to view contents of the client database  680  and the part database  675 , a dataworker to store data, and a messageworker to get the messages to be displayed on the tool bar  400 . 
         [0052]    In one embodiment, each client system  600  is associated with a unique identification number known to the server  650 . As a new client system  600  is inserted into the network, the client database  680  is updated with the identification number of that new client system  600 . Similarly, when the client system  600  is removed from the network, the client database  680  is updated accordingly. In one embodiment, the server  650  generates a report listing all the identification number of those client systems  600  that have not communicated with the server  650  for over a predetermined length of time. The report can then be used to investigate status of these client systems. 
         [0053]      FIG. 7  illustrates an embodiment of a computer-readable medium  700  containing various sets of instructions, code sequences, configuration information, and other data used by a computer or other processing device. The embodiment illustrated in  FIG. 7  is suitable for use with the software update method described above. The various information stored on medium  700  is used to perform various data processing operations. Computer-readable medium  700  is also referred to as a processor-readable medium. Computer-readable medium  700  can be any type of magnetic, optical, or electrical storage medium including a diskette, magnetic tape, CD-ROM, memory device, or other storage medium. 
         [0054]    Computer-readable medium  700  includes interface code  705  that controls the flow of information between various devices or components in the computer system. Interface code  705  may control the transfer of information within a device (e.g., between the processor and a memory device), or between an input/output port and a storage device. Additionally, interface code  705  may control the transfer of information from one device to another or from one network component to another. 
         [0055]    Computer-readable medium  700  also includes the patch checker program  710  that is used to request and receive software patches or updates from the server. Other codes stored on the computer-readable medium  700  may include the tool bar program  715  to display the patch checker icon, the message queue handler program  720  to receive the messages generated by the patch checker and send the messages to the server. The computer-readable medium  700  may also contain programs run on the server. These programs may include the patch worker  725  that communicates with the patch checker  710  from the server side, and the database access program  730  that allows the server to view the client database and the part database. 
         [0056]    From the above description and drawings, it will be understood by those of ordinary skill in the art that the particular embodiments shown and described are for purposes of illustration only and are not intended to limit the scope of the invention. Those of ordinary skill in the art will recognize that the invention may be embodied in other specific forms without departing from its spirit or essential characteristics. References to details of particular embodiments are not intended to limit the scope of the claims.