Techniques to automatically update software applications
Claim Score by NHIP
Abstract
Techniques to automatically update software applications are described. An apparatus may comprise a processor and a memory. The memory may store an update component that when executed by the processor is operative to manage updates for an application program. The update component may comprise an update manager and a permission manager. The update manager may be operative to update a file version for one or more application files of the application program and store one or more current file version identifiers for the one or more application files of the application program in the memory. The permission manager may be operative to receive a communication request to communicate with a remote device from the application program prior to communicating information to the remote device, and send a communication response granting or denying the communication request to the application program based on the one or more current file version identifiers. Other embodiments are described and claimed.

Term
Projected expiry 19 May 2030.
- Priority and filed
- Published
- Today
- Projected expiry
20 claims: 3 independent, 17 dependent
- 1A computer-implemented method, comprising:updating a file version for one or more application files of an application program for a first computing device;storing one or more current file version identifiers for the one or more application files of the application program in a memory of the first computing device;receiving a communication request to communicate with a second computing device from the application program prior to communicating information to the second computing device;and sending a communication response granting or denying the communication request to the application program based on the one or more current file version identifiers.
- 12Broadest claimClaim Score 68, broad(NHIP)An article comprising a storage medium containing instructions that when executed enable a system to store one or more current file version identifiers for the one or more application files of an application program in a memory unit, receive a communication request to communicate with a remote device from the application program prior to communicating information to the remote device, and send a communication response granting or denying the communication request to the application program based on the one or more current file version identifiers.
- 15An apparatus, comprising:a processor;and a memory to store an update component that when executed by the processor is operative to manage updates for an application program, the update component comprising an update manager and a permission manager, the update manager operative to update a file version for one or more application files of the application program and store one or more current file version identifiers for the one or more application files of the application program in the memory, and the permission manager operative to receive a communication request to communicate with a remote device from the application program prior to communicating information to the remote device and send a communication response granting or denying the communication request to the application program based on the one or more current file version identifiers.
Independent claims3
86 paragraphs in 4 sections, as filed
BACKGROUND
p-0002Software applications typically need periodic updates. The software updates may be for new product features, security enhancement, or other improvements. As a number of software applications implemented for a given computer increases, the complexity of updating each of the software applications increases as well. Further, many software applications are part of a suite of applications, thereby making updates to one software application conditional upon other software applications within the same suite. Other problems arise with software updates, such as balancing trade-offs between urgency of software updates against disruptions to user access to a given software application or a device implementing a software application. For example, software updates for security features may be prioritized over the inconvenience of forced reboots, while software updates for ancillary product features may be installed at the convenience of a user. Given the number of design considerations for software updates, enhanced software update techniques providing increased control and flexibility over the software update process become increasingly important. It is with respect to these and other considerations that the present improvements have been needed.
SUMMARY
p-0003This Summary is provided to introduce a selection of concepts in a simplified form that are further described below in the Detailed Description. This Summary is not intended to identify key features or essential features of the claimed subject matter, nor is it intended as an aid in determining the scope of the claimed subject matter.
p-0004In one embodiment, an apparatus may comprise a processor and a memory. The memory may store an update component that when executed by the processor is operative to manage updates for an application program. The update component may comprise an update manager and a permission manager. The update manager may be operative to update a file version for one or more application files of the application program and store one or more current file version identifiers for the one or more application files of the application program in the memory. The permission manager may be operative to receive a communication request to communicate with a remote device from the application program prior to communicating information to the remote device, and send a communication response granting or denying the communication request to the application program based on the one or more current file version identifiers. Other embodiments are described and claimed.
p-0005These and other features and advantages will be apparent from a reading of the following detailed description and a review of the associated drawings. It is to be understood that both the foregoing general description and the following detailed description are explanatory only and are not restrictive of aspects as claimed.
BRIEF DESCRIPTION OF THE DRAWINGS
p-0006<figref idrefs="DRAWINGS">FIG. 1</figref> illustrates an embodiment of a software update architecture.
p-0007<figref idrefs="DRAWINGS">FIG. 2</figref> illustrates an embodiment of a first logic flow.
p-0008<figref idrefs="DRAWINGS">FIG. 3</figref> illustrates an embodiment of a first operating environment.
p-0009<figref idrefs="DRAWINGS">FIG. 4</figref> illustrates an embodiment of a second operating environment.
p-0010<figref idrefs="DRAWINGS">FIG. 5</figref> illustrates an embodiment of a third operating environment.
p-0011<figref idrefs="DRAWINGS">FIG. 6</figref> illustrates an embodiment of a second logic flow.
p-0012<figref idrefs="DRAWINGS">FIG. 7</figref> illustrates an embodiment of a fourth operating environment.
p-0013<figref idrefs="DRAWINGS">FIG. 8</figref> illustrates an embodiment of a computing architecture.
DETAILED DESCRIPTION
p-0014Various embodiments are generally directed to techniques to automatically update software applications. Some embodiments are particularly directed to automatically retrieving update packages for software applications and installing update files for software applications at a client device prior to using the software applications for their intended purpose, such as communicating with a remote device, such as a server. This may save time and resources when a remote device requires a particular version of a software application prior to establishing a communication session. For instance, when a client device contacts a server having incompatible versions of a software application, processing and communications resources are wasted by the client device, server and network. Ensuring version compatibility prior to attempting to establish a communication session reduces such wasted resources. As a result of these and other advantages, the embodiments can improve affordability, scalability, modularity, extendibility, or interoperability for an operator, device or network.
p-0015<figref idrefs="DRAWINGS">FIG. 1</figref> illustrates a block diagram for a software update architecture <b>100</b> suitable for implementing one or more enhanced software update techniques to effectively and efficiently allow electronic systems and devices to utilize applications and communicate information using known and compatible versions of software applications.
p-0016In various embodiments, the software update architecture <b>100</b> may comprise a computer-implemented software update architecture <b>100</b> having multiple types of systems and devices composed of multiple hardware and software components. As used herein the terms “system” and “component” and “module” are intended to refer to a computer-related entity, comprising either hardware, a combination of hardware and software, software, or software in execution. For example, a component can be implemented as a process running on a processor, a processor, a hard disk drive, multiple storage drives (of optical and/or magnetic storage medium), an object, an executable, a thread of execution, a program, and/or a computer. By way of illustration, both an application running on a server and the server can be a component. One or more components can reside within a process and/or thread of execution, and a component can be localized on one computer and/or distributed between two or more computers as desired for a given implementation. The embodiments are not limited in this context.
p-0017In various embodiments, the software update architecture <b>100</b> may be implemented as a distributed system that distributes portions of the structure and/or operations for the media sharing techniques across multiple computing entities. Examples of a distributed system may include without limitation a client-server architecture, a 3-tier architecture, an N-tier architecture, a tightly-coupled or clustered architecture, a peer-to-peer architecture, a master-slave architecture, a shared database architecture, and other types of distributed systems. The embodiments are not limited in this context.
p-0018In the illustrated embodiment shown in <figref idrefs="DRAWINGS">FIG. 1</figref>, all or some of the software update architecture <b>100</b> may be implemented as part of one or more electronic devices having both computing and communications capabilities. The communications capabilities may include both wired and wireless communications capabilities. Examples of an electronic device may include without limitation a computing device, a mobile device, a personal digital assistant, a mobile computing device, a smart phone, a cellular telephone, a handset, a one-way pager, a two-way pager, a messaging device, a computer, a personal computer (PC), a desktop computer, a laptop computer, a notebook computer, a handheld computer, a server, a server array or server farm, a web server, a network server, an Internet server, a work station, a mini-computer, a main frame computer, a supercomputer, a network appliance, a web appliance, a distributed computing system, multiprocessor systems, processor-based systems, consumer electronics, programmable consumer electronics, television, digital television, set top box, wireless access point, base station, subscriber station, mobile subscriber center, radio network controller, router, hub, gateway, bridge, switch, machine, or combination thereof. The embodiments are not limited in this context.
p-0019The various systems and devices shown as part of the software update architecture <b>100</b> may be communicatively coupled via various types of communications media, such as a wired and/or wireless network. Similarly, components for a given system or device may coordinate operations between each other. The coordination may involve the uni-directional or bi-directional exchange of information. For instance, certain components may communicate information in the form of signals communicated over a communications media. The information can be implemented as signals allocated to various signal lines. In such allocations, each message is a signal. Further embodiments, however, may alternatively employ data messages. Such data messages may be sent across various connections. Exemplary connections include parallel interfaces, serial interfaces, and bus interfaces.
p-0020In the illustrated embodiment shown in <figref idrefs="DRAWINGS">FIG. 1</figref>, the software update architecture <b>100</b> may comprise multiple computing devices <b>110</b>-<b>1</b>-<i>a, </i>an update server <b>140</b>, an update authority <b>150</b>, and an update download server <b>160</b>, all communicating over a network <b>130</b>. Although the software update architecture <b>100</b> as shown in <figref idrefs="DRAWINGS">FIG. 1</figref> has a limited number of elements in a certain topology, it may be appreciated that the software update architecture <b>100</b> may include more or less elements in alternate topologies as desired for a given implementation.
p-0021The network <b>130</b> may comprise a communications framework designed to communicate information between the various devices of the software update architecture <b>100</b>. The network <b>130</b> may implement any well-known communications techniques, such as techniques suitable for use with packet-switched networks (e.g., public networks such as the Internet, private networks such as an enterprise intranet, and so forth), circuit-switched networks (e.g., the public switched telephone network), or a combination of packet-switched networks and circuit-switched networks (with suitable gateways and translators).
p-0022The update server <b>140</b> may comprise or employ one or more server computing devices and/or server programs that operate to perform various methodologies in accordance with the described embodiments. For example, when installed and/or deployed, a server program may support one or more server roles of the server computing device for providing certain services and features. Exemplary update server <b>140</b> may include, for example, stand-alone and enterprise-class server computers operating a server OS such as a MICROSOFT® OS, a UNIX® OS, a LINUX® OS, or other suitable server-based OS. Exemplary server programs may include server programs for asset inventory, software distribution, software updates, and infrastructure security, such as a Microsoft Systems Management Server (SMS). Other exemplary server programs may include communications server programs such as Microsoft Office Communications Server (OCS) for managing incoming and outgoing messages, messaging server programs such as Microsoft® Exchange Server for providing unified messaging (UM) for e-mail, voicemail, VoIP, instant messaging (IM), group IM, enhanced presence, and audio-video conferencing, and/or other types of programs, applications, or services in accordance with the described embodiments.
p-0023The update authority <b>150</b> may also comprise or employ one or more server computing devices and/or server programs that operate to perform various methodologies in accordance with the described embodiments. For example, when installed and/or deployed, a server program may support one or more server roles of the server computing device for providing certain services and features. Exemplary update authority <b>150</b> may include, for example, stand-alone and enterprise-class server computers operating a server OS such as a MICROSOFT OS, a UNIX OS, a LINUX OS, or other suitable server-based OS. In one embodiment, for example, the update authority <b>150</b> may be a trusted software source, such as Microsoft Corporation, wherein the trusted software source maintains information concerning software updates.
p-0024The update server <b>140</b> may include an update manager <b>142</b> and an update catalog <b>144</b>. The update manager <b>142</b> allows the update server <b>140</b> to obtain the update catalog <b>144</b> from the update authority <b>150</b>. In one embodiment, the update catalog <b>144</b> may be configured as an extensible markup language (XML) document, and includes information about the availability of software updates (“patches”) and the version of the software to which they should be applied. Additionally, the update catalog <b>144</b> may include complex file update rules, typically in the form of Boolean logic, which prescribes the conditions under which individual software updates should be installed. For instance, the file update rules may implement business logic controlling installation of file updates for individual application programs or application programs that are part of a product suite. Therefore, the update manager <b>142</b> is configured to communicate with the update authority <b>150</b>, to maintain the resident copy of the update catalog <b>144</b> in current form. Additionally, the update manager <b>142</b> is configured to check for a code, such as an “authenticode,” to determine if the update catalog <b>144</b> is authentic, or has been corrupted, tampered with or otherwise rendered useless or harmful.
p-0025The update download server <b>160</b> may also comprise or employ one or more server computing devices and/or server programs that operate to perform various methodologies in accordance with the described embodiments. For example, when installed and/or deployed, a server program may support one or more server roles of the server computing device for providing certain services and features. Exemplary update authority <b>150</b> may include, for example, stand-alone and enterprise-class server computers operating a server OS such as a MICROSOFT OS, a UNIX OS, a LINUX OS, or other suitable server-based OS. In one embodiment, for example, the update download server <b>160</b> stores officially certified updates for software applications, such as applications <b>106</b>-<b>1</b>-<i>b </i>of the computing devices <b>110</b>-<b>1</b>-<i>a. </i>Various devices of the software update architecture <b>100</b> may obtain updates for software applications stored by the update download server <b>160</b>. Information on the location of the update download server <b>160</b> and/or a particular update package for a software application may be stored in the update catalog <b>144</b>. For example, the update catalog <b>144</b> may include one or more uniform resource locators (URL) linking to a particular update package for a software application stored by the update download server <b>160</b>. Updates obtained for a client may then be replicated to the client using SMS or other software distribution technology.
p-0026In one embodiment, a representative computing device <b>110</b>-<b>1</b> may be implemented as a client computing device, such as a handheld computer, laptop, personal computer, tablet, workstation, etc. The computing device <b>110</b>-<b>1</b> may have multiple application programs <b>106</b>-<b>1</b>-<i>b </i>installed on the computing device <b>110</b>-<b>1</b>. The application programs <b>106</b>-<b>1</b>-<i>b </i>generally may allow a user to accomplish one or more specific tasks. In various implementations, the application programs <b>106</b>-<b>1</b>-<i>b </i>may provide one or more graphical user interfaces (GUIs) to communicate information between the computing device <b>110</b>-<b>1</b> and a user. Examples of application programs <b>106</b>-<b>1</b>-<i>b </i>may include, without limitation, messaging applications, web browsing applications, personal information management (PIM) applications (e.g., contacts, calendar, scheduling, tasks), word processing applications, spreadsheet applications, database applications, media applications (e.g., video player, audio player, multimedia player, digital camera, video camera, media management), gaming applications, and so forth. It is also to be appreciated that the computing device <b>110</b>-<b>1</b> may implement other types of applications in accordance with the described embodiments.
p-0027In one embodiment, the computing device <b>110</b>-<b>1</b> may include various system programs as well, such as operating system (OS) <b>107</b>. System programs generally may assist in the running of the computing device <b>110</b>-<b>1</b> and may be directly responsible for controlling, integrating, and managing the individual hardware components of the computer system. The OS <b>107</b> may be implemented as any suitable OS consistent with the described embodiments, such as a Microsoft Windows OS, for example. The computing device <b>110</b>-<b>1</b> may comprise other system programs such as device drivers, programming tools, utility programs, software libraries, application programming interfaces (APIs), and so forth.
p-0028In one embodiment, a computing device <b>110</b>-<b>2</b> may be implemented as a server computing device. The computing device <b>110</b>-<b>2</b> may comprise or employ one or more server computing devices and/or server programs that operate to perform various methodologies in accordance with the described embodiments. For example, when installed and/or deployed, a server program may support one or more server roles of the server computing device for providing certain services and features. Exemplary computing device <b>110</b>-<b>2</b> may include, for example, stand-alone and enterprise-class server computers operating a server OS such as a MICROSOFT OS, a UNIX OS, a LINUX OS, or other suitable server-based OS. Exemplary server programs may include, for example, network storage server programs such as MICROSOFT® LIVE providing online network storage of documents and files, including multimedia or media files such as images, photographs, photo albums, videos, video albums, and so forth. Exemplary server programs may further include, for example, network application programs such as social networking application programs, search applications, document management programs, weblogs (blogs), word processing programs, spreadsheet programs, database programs, drawing programs, document sharing programs, message applications, web services, web applications, web server, and/or other types of programs, applications, or services in accordance with the described embodiments.
p-0029The computing devices <b>110</b>-<b>1</b>-<i>a, </i>including the computing devices <b>110</b>-<b>1</b>, <b>110</b>-<b>2</b> described above, may each comprise a processor <b>102</b> and a memory <b>104</b> communicatively coupled to the processor <b>102</b>. The processor <b>102</b> and the memory <b>104</b> may each be communicatively coupled to a communication interface <b>109</b>. An exemplary architecture and examples for computing devices <b>110</b>-<b>1</b>-<i>a </i>may be described with reference to <figref idrefs="DRAWINGS">FIG. 8</figref>.
p-0030In various embodiments, the software update architecture <b>100</b> may implement enhanced software update and distribution techniques to update software applications installed on the various devices of the software update architecture <b>100</b>, including the computing device <b>110</b>-<b>1</b>. In conventional systems, software updates typically occur after an application program attempts to be used for its intended purpose, such as communicating with another application program implemented by another device. For instance, a client message application may attempt to initiate communications with a server message application only to find that its version of client message application is older than current versions acceptable for use by the server message application. When this occurs, the client message application may attempt to update its application files with updated versions using any number of conventional software update techniques. In the meantime, however, the client message application has consumed processing resources in generating a message and communications request, and communications resources by communicating the message and communications request over a network to a message server. Further, the message server has consumed processing resources in receiving the message and communications request and analyzing the communications request to determine it is in improper format used by an older version of software, as well as more communication resources in communicating a deny response and instructions to update the client message application before attempting another communication.
p-0031To solve these and other problems, the computing device <b>110</b>-<b>1</b> may include an update component <b>120</b> that when executed by the processor <b>102</b> is operative to manage updates for an application program <b>106</b>-<b>1</b>-<i>b. </i>The update component <b>120</b> may implement enhanced software update techniques to ensure version compatibility prior to attempting to establish a communication session between devices to more efficiently use computing and communications resources. The update component <b>120</b> may also operate as an enforcement mechanism to ensure file updates are applied to the application programs <b>106</b>-<b>1</b>-<i>b </i>before wasting any computing and/or communications resources due to version incompatibilities.
p-0032As shown in <figref idrefs="DRAWINGS">FIG. 1</figref>, the update component <b>120</b> may comprise an update manager <b>121</b> and a permission manager <b>125</b>. The update manager <b>121</b> may further comprise a catalog module <b>122</b>, a download module <b>123</b> and an installation module <b>124</b>. The catalog module <b>122</b> may manage a client update catalog <b>126</b>, and synchronize the client update catalog <b>126</b> with a server update catalog <b>144</b> stored by the update server <b>140</b>, as discussed in more detail with reference to <figref idrefs="DRAWINGS">FIG. 3</figref>.
p-0033The update manager <b>121</b> may be generally arranged to coordinate and manage update operations for the computing device <b>110</b>-<b>1</b> with the other devices of the software update architecture <b>100</b>. For instance, the update manager <b>121</b> may communicate with the update server <b>140</b> to coordinate updates for the computing device <b>110</b>-<b>1</b>. In one embodiment, the update server <b>140</b> may coordinate with the update authority <b>150</b> and the update download server <b>160</b> to facilitate update operations for the update manager <b>121</b>. In one embodiment, the update manager <b>121</b> of the computing device <b>110</b>-<b>1</b> may be arranged to directly interact with the update authority <b>150</b> and the update download server <b>160</b>, thereby reducing or eliminating the need for the update server <b>140</b>.
p-0034In one embodiment, the update manager <b>121</b>may be operative to update a file version for one or more application files of the application programs <b>106</b>-<b>1</b>-<i>b, </i>and store one or more current file version identifiers for the one or more application files of the application programs <b>106</b>-<b>1</b>-<i>b </i>in the memory <b>104</b> and/or cache <b>108</b>. Each application program <b>106</b>-<b>1</b>-<i>b </i>may comprise one or more application files, either as source code, or more commonly, as executable code. Each of the application files may have a certain version associated with it. Software versioning is the process of assigning unique version identifiers to unique states of computer software. The unique version identifiers may comprise unique version names, unique version numbers, or combinations thereof. Version identifiers are generally assigned in increasing order and correspond to new developments in the software. Revision control is often used for keeping track of incrementally different versions of computer software and other electronic information. A variety of version identifying schemes may be implemented to keep track of different versions of an application program <b>106</b>-<b>1</b>-<i>b </i>and/or its associated application files, and the embodiments are not limited to a particular type of versioning scheme.
p-0035In one embodiment, the update manager <b>121</b> may include various update tools, such as Windows Management Instrumentation, SMS client software, an XML parser, custom GUI views, and other elements typically used for software update operations. The client update catalog <b>126</b> provides information regarding the relationship between files potentially present on the computing device <b>110</b>-<b>1</b> and updates which may need to be installed on those files. The update manager <b>121</b> may read the update catalog <b>136</b>, which is typically in the form of an XML document, using an XML parser. The update manager <b>121</b> may query the OS <b>107</b> to determine a precise revision level of programs and/or files present on the computing device <b>110</b>-<b>1</b>. The update manager <b>121</b> may base each query in part on the outcome of previous queries and on the rules, typically expressed as Boolean equations, within the update catalog <b>126</b>. Accordingly, the update manager <b>121</b> is arranged to determine a file type and revision level of all relevant files on the computing device <b>110</b>-<b>1</b>, and additionally to determine the updates that are applicable to the files found. When completed, this information may be used during software update operations for the computing device <b>110</b>-<b>1</b>.
p-0036The permission manager <b>125</b> may be generally arranged to implement various update enforcement techniques. Prior to operation, each of the various application programs <b>106</b>-<b>1</b>-<i>b </i>may communicate with the update component <b>120</b> to ensure it is using a current version for the application program <b>106</b>-<b>1</b>-<i>b </i>as defined by the client update catalog <b>126</b>. The update component <b>120</b> allows application programs <b>106</b>-<b>1</b>-<i>b </i>to query very quickly (e.g., less than 10 ms) whether or not an application program <b>106</b>-<b>1</b>-<i>b </i>has any pending updates, and the urgency of those updates (e.g., required/optional). The update component <b>120</b> also allows application programs <b>106</b>-<b>1</b>-<i>b </i>to query more slowly, or optionally, as needed. A fast query may be accomplished by reading an associated current file version identifier that is stored locally in the memory <b>104</b> and/or the cache <b>108</b>. The current file version identifier may be set on a first run of an application program <b>106</b>-<b>1</b>-<i>b </i>after the update component <b>120</b> initializes and executes as a background process/thread, and when fully instantiated does a full query of what updates are available for a given application program <b>106</b>-<b>1</b>-<i>b. </i>
p-0037A full query may comprise, for example, communicating with the update server <b>140</b> for an update catalog having update information, and evaluating update rules within the update catalog to determine applicability of any pending updates. If the updates are applicable, their status (e.g., required/optional) is cached locally at the cache <b>108</b>, and a background download of update packages may be initiated asynchronously. The download rate of update packages may be throttled to preserve bandwidth for the computing device <b>110</b>-<b>1</b>. After all pending update packages are downloaded, a graphic user interface (GUI) view is presented to a user, informing them that certain software updates are available, and prompting them to install. When the update packages are unpacked and actually installed for one or more application programs <b>106</b>-<b>1</b>-<i>b, </i>a success parameter may be used to evaluate whether update operations were successful or a failure condition has occurred. In case of a failure condition, a given update may be rolled back to a previous version of the application programs <b>106</b>-<b>1</b>-<i>b. </i>When the update packages are unpacked and actually installed for multiple application programs <b>106</b>-<b>1</b>-<i>b </i>within a product suite, a success parameter may be used to evaluate whether any of the update operations have failed for a given application program <b>106</b>-<b>1</b>-<i>b </i>within the product suite. In the case of a single or multiple failures, all updates for a product suite may be rolled back in order to preserve a same version used throughout the product suite.
p-0038In one embodiment, the permission manager <b>125</b> may be operative to receive a communication request to communicate with a remote device, such as the computing device <b>110</b>-<b>2</b>, from an application program <b>106</b>-<b>1</b>-<i>b </i>prior to communicating information to the computing device <b>110</b>-<b>2</b>. For instance, assume an application program <b>106</b>-<b>1</b> of the computing device <b>110</b>-<b>1</b> is a message application used for communicating messages via a message server application or web service implemented by the computing device <b>110</b>-<b>2</b>. The permission manager <b>125</b> may send a communication response granting or denying the communication request to the application program <b>106</b>-<b>1</b>-<i>b </i>based on the one or more current file version identifiers. By actively checking whether an application program <b>106</b>-<b>1</b>-<i>b </i>of the computing device <b>110</b>-<b>1</b> has a software version compatible with software applications implemented by the computing device <b>110</b>-<b>2</b>, computing and communications resources may be saved relative to those consumed by checking software version compatibility only after attempting to communicate with the computing device <b>110</b>-<b>2</b> via control and media signals communicated over the network <b>130</b>.
p-0039Operations for the above-described embodiments may be further described with reference to one or more logic flows. It may be appreciated that the representative logic flows do not necessarily have to be executed in the order presented, or in any particular order, unless otherwise indicated. Moreover, various activities described with respect to the logic flows can be executed in serial or parallel fashion. The logic flows may be implemented using one or more hardware elements and/or software elements of the described embodiments or alternative elements as desired for a given set of design and performance constraints. For example, the logic flows may be implemented as logic (e.g., computer program instructions) for execution by a logic device (e.g., a general-purpose or specific-purpose computer).
p-0040<figref idrefs="DRAWINGS">FIG. 2</figref> illustrates one embodiment of a logic flow <b>200</b>. The logic flow <b>200</b> may be representative of some or all of the operations executed by one or more embodiments described herein. For instance, the logic flow <b>200</b> may be representative of some or all of the operations executed by the computing device <b>110</b>-<b>1</b> and the update component <b>120</b>.
p-0041In the illustrated embodiment shown in <figref idrefs="DRAWINGS">FIG. 2</figref>, the logic flow <b>200</b> may update a file version for one or more application files of an application program for a first computing device at block <b>202</b>. For example, the update manager <b>121</b> may update a file version for one or more application files of an application program <b>106</b>-<b>1</b>-<i>b </i>for the computing device <b>110</b>-<b>1</b>.
p-0042The logic flow <b>200</b> may store one or more current file version identifiers for the one or more application files of the application program in a memory of the first computing device at block <b>204</b>. For example, the update manager <b>121</b> may store one or more current file version identifiers for the one or more application files of the application programs <b>106</b>-<b>1</b>-<i>b </i>in the memory <b>104</b> and/or the memory <b>108</b> of the computing device <b>110</b>-<b>1</b>. The file version identifiers may be tracked using any desired versioning technique.
p-0043The logic flow <b>200</b> may receive a communication request to communicate with a second computing device from the application program prior to communicating information to the second computing device at block <b>206</b>. For example, the permission manager <b>125</b> may receive a communication request to communicate with another computing device <b>110</b>-<b>2</b> from an application program <b>106</b>-<b>1</b>-<i>b </i>prior to communicating information to the computing device <b>110</b>-<b>2</b>.
p-0044The logic flow <b>200</b> may send a communication response granting or denying the communication request to the application program based on the one or more current file version identifiers at block <b>208</b>. For example, the permission manager <b>125</b> may generate and send a communication response granting or denying the communication request to the requesting application program <b>106</b>-<b>1</b>-<i>b </i>based on the one or more current file version identifiers.
p-0045<figref idrefs="DRAWINGS">FIG. 3</figref> illustrates an embodiment of an operating environment <b>300</b> suitable for the software update architecture <b>100</b>. The operating environment <b>300</b> illustrates signaling and/or message flow between the various devices of the software update architecture <b>100</b> to provide enhanced software update services for the representative computing device <b>110</b>-<b>1</b>, for example. The computing device <b>110</b>-<b>1</b> may include the application program <b>106</b>-<b>1</b> and the update component <b>120</b>. The application program <b>106</b>-<b>1</b> may be implemented as a message application such as Windows Messenger Client (WMC) or Windows Live Messenger (WLM), for example. However, the application program <b>106</b>-<b>1</b> may be implemented as other application programs as well.
p-0046In the illustrated embodiment shown in <figref idrefs="DRAWINGS">FIG. 3</figref>, the update manager <b>121</b> of the update component <b>120</b> may comprise a catalog module <b>122</b>. The catalog module <b>122</b> may generally manage an update catalog used to store update information for the computing device <b>110</b>-<b>1</b>. In one embodiment, the catalog module <b>122</b> may synchronize the client update catalogs <b>126</b> with the server update catalog <b>144</b>. Each update catalog <b>126</b>, <b>144</b> may include update information needed for update operations of the application programs <b>106</b>-<b>1</b>-<i>b </i>of the computing device <b>110</b>-<b>1</b>. In one embodiment, for example, the update catalogs <b>126</b>, <b>144</b> may have a set of file update rules <b>310</b> and update file version identifiers <b>312</b>-<b>1</b>-<i>h </i>for one or more application files <b>314</b>-<b>1</b>-<i>f </i>of one or more application programs <b>106</b>-<b>1</b>-<i>b. </i>The file update rules <b>310</b> and update file version identifiers <b>312</b>-<b>1</b>-<i>h </i>may be used to implement business logic to control update operations for the computing device <b>110</b>-<b>1</b> by atomically applying updates to specific application programs <b>106</b>-<b>1</b>-<i>b </i>in a manner that maintains version normalization. For instance, certain update operations may be applied to application x while other update operations may be applied to application y. In another example, update operations may be applied to multiple applications within a product suite, such as Microsoft Office application programs, to ensure they are all running the same versions. The file update rules <b>310</b> and update file version identifiers <b>312</b>-<b>1</b>-<i>h </i>may be changed to dynamically implement business rules up to and including restricting client side product usage. The update catalogs <b>126</b>, <b>144</b> may also include various pointers, such as hyperlinks, to update packages stored by the update server <b>140</b> and/or the update download server <b>160</b>.
p-0047The update component <b>120</b> may initiate update operations for one or more of the application programs <b>106</b>-<b>1</b>-<i>b. </i>Update operations may be initiated by the update component <b>120</b> or another system program of the computing device <b>110</b>-<b>1</b>, such as the OS <b>107</b>. Additionally or alternatively, update operations may be initiated upon request by one of the application programs <b>106</b>-<b>1</b>-<i>b, </i>such as the application program <b>106</b>-<b>1</b> as shown in <figref idrefs="DRAWINGS">FIG. 3</figref>, for example.
p-0048Before or after initiation of update operations, the catalog module <b>122</b> may send a catalog request <b>302</b> to the update server <b>140</b> to synchronize or download a latest version of the server update catalog <b>144</b> with the client update catalog <b>126</b>. The update server <b>140</b> may send a catalog response <b>304</b> with some or all of the update information stored in the server update catalog <b>144</b>. The catalog manager <b>122</b> may store the update catalog <b>126</b> in the cache <b>108</b> as indicated by arrow <b>306</b>. In some cases, the cache <b>108</b> may comprise a secure cache in accordance with various security policies or techniques. A set of current file version identifiers <b>316</b>-<b>1</b>-<i>g </i>for various application files of the application programs <b>106</b>-<b>1</b>-<i>b </i>may be compared to the update file version identifiers <b>312</b>-<b>1</b>-<i>h </i>to determine whether update operations are needed, and if so, how the update operations are to be implemented by the update component <b>120</b> in accordance with the file update rules <b>310</b> and/or user commands.
p-0049<figref idrefs="DRAWINGS">FIG. 4</figref> illustrates an embodiment of an operating environment <b>400</b> suitable for the software update architecture <b>100</b>. The operating environment <b>400</b> illustrates signaling and/or message flow between the various devices of the software update architecture <b>100</b> to provide enhanced software update services for the computing device <b>110</b>-<b>1</b>, for example.
p-0050In the illustrated embodiment shown in <figref idrefs="DRAWINGS">FIG. 4</figref>, the update manager <b>121</b> of the update component <b>120</b> may comprise a download module <b>123</b>. The download module <b>123</b> may be generally arranged to manage download operations for the update component <b>120</b>. In one embodiment, the download module <b>123</b> may send an update request <b>402</b> to the update server <b>140</b> to retrieve one or more update packages <b>404</b> for the one or more application files <b>314</b>-<b>1</b>-<i>f </i>of the application program <b>106</b>-<b>1</b> from the update server <b>140</b>. For example, this may occur when one or more current file version identifiers <b>316</b>-<b>1</b>-<i>g </i>for the one or more application files <b>314</b>-<b>1</b>-<i>f </i>of the application program <b>106</b>-<b>1</b> do not match one or more update file version identifiers <b>312</b>-<b>1</b>-<i>h </i>for the one or more application files <b>314</b>-<b>1</b>-<i>f </i>of the application program <b>106</b>-<b>1</b>. The update server <b>140</b> may already store the update package <b>404</b> as previously retrieved from the update download server <b>140</b>, or retrieve the update package <b>404</b> from the update download server <b>140</b> in response to the update request <b>402</b>. Additionally or alternatively, the download module <b>123</b> may download the update package <b>404</b> directly from the update download server <b>140</b>. This may be advantageous whenever the update server <b>140</b> is offline and inaccessible, for example. Upon receiving the update package <b>404</b>, the download module <b>123</b> may store the update package <b>404</b> in the cache <b>108</b>, or if too large, the memory <b>104</b>.
p-0051The update package <b>404</b> may include one or more file updates <b>408</b>-<b>1</b>-<i>h </i>for the application programs <b>106</b>-<b>1</b>-<i>b. </i>The update package may further include <b>404</b> various utilities, programs and scripts for unpacking the file updates <b>408</b>-<b>1</b>-<i>h </i>and installing the file updates <b>408</b>-<b>1</b>-<i>h. </i>
p-0052<figref idrefs="DRAWINGS">FIG. 5</figref> illustrates an embodiment of an operating environment <b>500</b> suitable for the software update architecture <b>100</b>. The operating environment <b>500</b> illustrates signaling and/or message flow between the various devices of the software update architecture <b>100</b> to provide enhanced software update services for the computing device <b>110</b>-<b>1</b>, for example.
p-0053In the illustrated embodiment shown in <figref idrefs="DRAWINGS">FIG. 5</figref>, the update manager <b>121</b> of the update component <b>120</b> may comprise an installation module <b>124</b>. The installation module <b>124</b> may be generally arranged to manage installation operations for installing file updates <b>408</b>-<b>1</b>-<i>h </i>for the application programs <b>106</b>-<b>1</b>-<i>b. </i>In one embodiment, the installation module <b>124</b> is operative to install each of the file updates <b>408</b>-<b>1</b>-<i>h </i>corresponding to each of the application files <b>314</b>-<b>1</b>-<i>f </i>of the application program <b>106</b>-<b>1</b> from the update package <b>404</b>, as indicated by arrows <b>502</b>, <b>504</b> and <b>506</b>.
p-0054In various embodiments, the installation module <b>124</b> may install file updates <b>408</b>-<b>1</b>-<i>h </i>for the one or more application files <b>314</b>-<b>1</b>-<i>f </i>of the application program <b>106</b>-<b>1</b> from the update package <b>404</b> based on associated update priority values <b>410</b>-<b>1</b>-<i>i </i>for the file updates <b>408</b>-<b>1</b>-<i>h </i>and the file update rules <b>310</b>. The update priority values <b>410</b>-<b>1</b>-<i>i </i>may indicate a priority level for the file updates <b>408</b>-<b>1</b>-<i>h. </i>The priority levels may include such levels as “mandatory” or “optional.” The priority levels may also indicate a time limit for installing the file updates <b>408</b>-<b>1</b>-<i>h, </i>such as installing within 24 hours. Business logic to control update operations for the computing device <b>110</b>-<b>1</b> may be implemented, for example, by the file update rules <b>310</b> using the values stored by the update priority values <b>410</b>-<b>1</b>-<i>i. </i>
p-0055In various embodiments, the installation module <b>124</b> may install the file updates <b>408</b>-<b>1</b>-<i>h </i>for the one or more application files <b>314</b>-<b>1</b>-<i>f </i>of the application program <b>106</b>-<b>1</b> from the update package <b>404</b> when an associated update priority value <b>410</b>-<b>1</b>-<i>i </i>indicates a file update is mandatory. In this case, updates may automatically occur with or without notification to a user, but in any event is a forced update, and may include a forced reboot of the computing device <b>110</b>-<b>1</b>.
p-0056In various embodiments, the installation module <b>124</b> may defer or deny installing the file updates <b>408</b>-<b>1</b>-<i>h </i>for the one or more application files <b>314</b>-<b>1</b>-<i>f </i>of the application program <b>106</b>-<b>1</b> from the update package <b>404</b> when an associated update priority value <b>410</b>-<b>1</b>-<i>i </i>indicates a file update is optional. For instance, a user may be notified of the suggested update via a GUI view, and updates may be controlled based on user commands.
p-0057In various embodiments, the installation module <b>124</b> may install the file updates <b>408</b>-<b>1</b>-<i>h </i>for the one or more application files <b>314</b>-<b>1</b>-<i>f </i>of the application program <b>106</b>-<b>1</b> from the update package <b>404</b> based on associated update priority values <b>410</b>-<b>1</b>-<i>i </i>for the file updates <b>408</b>-<b>1</b>-<i>h </i>and associated update override values <b>412</b>-<b>1</b>-<i>j </i>for the one or more application files <b>408</b>-<b>1</b>-<i>h </i>of the application program <b>106</b>-<b>1</b>. The update override values <b>412</b>-<b>1</b>-<i>j </i>may be set by one of the application programs <b>106</b>-<b>1</b>-<i>b. </i>One application program <b>106</b>-<b>1</b>-<i>b </i>may store an update override value <b>412</b>-<b>1</b>-<i>j </i>in cache <b>108</b> (e.g., via the installation module <b>124</b>) for another application program <b>106</b>-<b>1</b>-<i>b </i>to control update operations for the other application programs <b>106</b>-<b>1</b>-<i>b. </i>For instance, the application program <b>106</b>-<b>1</b> may comprise part of a product suite including the application programs <b>106</b>-<b>2</b>, <b>106</b>-<b>3</b>. The application program <b>106</b>-<b>1</b> may control updates for the application programs <b>106</b>-<b>2</b>, <b>106</b>-<b>3</b> to ensure there is consistent versions used across the entire product suite. To accomplish this, the application program <b>106</b>-<b>1</b> may set an update override values <b>412</b>-<b>2</b>, <b>412</b>-<b>3</b> for the respective application programs <b>106</b>-<b>2</b>, <b>106</b>-<b>3</b> to control when the application programs <b>106</b>-<b>2</b>, <b>106</b>-<b>3</b> are updated. It is worthy to note that when an update override value <b>412</b>-<b>1</b> is not explicitly set, it may default to a null value and is not a factor in determining whether to install a particular update. In this manner, one managed application can manage updates for other managed applications.
p-0058In various embodiments, the installation module <b>124</b> may install the file updates <b>408</b>-<b>1</b>-<i>h </i>for the one or more application files <b>314</b>-<b>1</b>-<i>f </i>of the application program <b>106</b>-<b>1</b> from the update package <b>404</b> when an associated update priority value <b>410</b>-<b>1</b> indicates a file update is optional and an update override value <b>412</b>-<b>1</b> indicates a file update is mandatory. In this case, a value for the update override value <b>412</b>-<b>1</b> overrides a value set for the update priority value <b>410</b>-<b>1</b>.
p-0059In various embodiments, the installation module <b>124</b> may install the file updates <b>408</b>-<b>1</b>-<i>h </i>for the one or more application files <b>314</b>-<b>1</b>-<i>f </i>of the application program <b>106</b>-<b>1</b> from the update package <b>404</b> when an associated update priority value <b>410</b>-<b>1</b> indicates a file update is optional and an update override value <b>412</b>-<b>1</b> indicates the file update is optional. In this case, a value for the update override value <b>412</b>-<b>1</b> matches a value set for the update priority value <b>410</b>-<b>1</b>, and therefore one does not necessarily override the other.
p-0060<figref idrefs="DRAWINGS">FIG. 6</figref> illustrates one embodiment of a logic flow <b>600</b>. The logic flow <b>600</b> may be representative of some or all of the operations executed by one or more embodiments described herein. For instance, the logic flow <b>600</b> may be representative of some or all of the operations executed by the computing device <b>110</b>-<b>1</b> and the update component <b>120</b>.
p-0061In the illustrated embodiment shown in <figref idrefs="DRAWINGS">FIG. 6</figref>, the logic flow <b>600</b> may retrieve the one or more current file version identifiers for the one or more application files of the application program from the memory of the first computing device at block <b>602</b>. For example, the permission manager <b>125</b> may retrieve one or more current file version identifiers <b>316</b>-<b>1</b>-<i>g </i>for one or more application files <b>314</b>-<b>1</b>-<i>f </i>of application programs <b>106</b>-<b>1</b>-<i>b </i>from the cache <b>108</b> of the computing device <b>110</b>-<b>1</b>.
p-0062The logic flow <b>600</b> may compare the one or more current file version identifiers with one or more defined version identifiers at block <b>604</b>. For example, the permission manager <b>125</b> may compare the one or more current file version identifiers <b>316</b>-<b>1</b>-<i>g </i>with one or more defined version identifiers. The defined version identifiers may represent a minimum version level suitable for the application <b>106</b>-<b>1</b>-<i>b </i>for use for its intended purpose, such as communicating with an application or service implemented by another device.
p-0063The logic flow <b>600</b> may generate a communication response granting the communication request when the one or more current file version identifiers are greater than or equal to the one or more defined version identifiers at block <b>606</b>. For example, the permission manager <b>125</b> may generate a communication response granting the communication request when the one or more current file version identifiers <b>316</b>-<b>1</b>-<i>g </i>are greater than or equal to the one or more defined version identifiers.
p-0064The logic flow <b>600</b> may generate a communication response denying the communication request when the one or more current file version identifiers are less than the one or more defined version identifiers at block <b>608</b>. For example, the permission manager <b>125</b> may generate a communication response denying the communication request when the one or more current file version identifiers <b>316</b>-<b>1</b>-<i>g </i>are less than the one or more defined version identifiers.
p-0065<figref idrefs="DRAWINGS">FIG. 7</figref> illustrates an embodiment of an operating environment <b>700</b> suitable for the software update architecture <b>100</b>. The operating environment <b>700</b> illustrates signaling and/or message flow between the various devices of the software update architecture <b>100</b> to provide enhanced software update and permission services for the computing device <b>110</b>-<b>1</b>, for example.
p-0066In the illustrated embodiment shown in <figref idrefs="DRAWINGS">FIG. 7</figref>, the update component <b>120</b> may implement the permission manager <b>125</b>. The permission manager <b>125</b> may be generally arranged to implement various update enforcement techniques. Prior to operation, each of the various application programs <b>106</b>-<b>1</b>-<i>b </i>may communicate with the update component <b>120</b> to ensure it is using a current version for the application program <b>106</b>-<b>1</b>-<i>b </i>as defined by the client update catalog <b>126</b>.
p-0067In one embodiment, the application program <b>106</b>-<b>1</b> may send a communication request to communicate with the computing device <b>110</b>-<b>2</b> to the update component <b>120</b> prior to communicating information to the computing device <b>110</b>-<b>2</b> as indicated by arrow <b>702</b>. The permission manager <b>125</b> may retrieve one or more current file version identifiers <b>316</b>-<b>1</b>-<i>g </i>for the one or more application files <b>314</b>-<b>1</b>-<i>f </i>of the application program <b>106</b>-<b>1</b> from the cache <b>108</b> as indicated by arrow <b>704</b>. The permission manager <b>125</b> may compare the current file version identifiers <b>316</b>-<b>1</b>-<i>g </i>with corresponding defined version identifiers <b>710</b>-<b>1</b>-<i>k </i>stored in the cache <b>108</b>.
p-0068The defined version identifiers <b>710</b>-<b>1</b>-<i>k </i>may be used to implement various levels of permissions granted to a given application program <b>106</b>-<b>1</b>-<i>b. </i>The defined version identifiers <b>710</b>-<b>1</b>-<i>k </i>may represent a version level suitable for the application <b>106</b>-<b>1</b>-<i>b </i>for use for its intended purpose, such as communicating with an application or service implemented by the computing device <b>110</b>-<b>2</b>. In one embodiment, the defined version identifiers <b>710</b>-<b>1</b>-<i>k </i>may match the update file version identifiers <b>312</b>-<b>1</b>-<i>h </i>to ensure that only the latest versions of software applications are used when communicating with the computing device <b>110</b>-<b>2</b>. In one embodiment, the defined version identifiers <b>710</b>-<b>1</b>-<i>k </i>may match an older file version relative to the update file identifiers <b>312</b>-<b>1</b>-<i>h </i>to ensure some minimum compatibility with the software applications used by the computing device <b>110</b>-<b>2</b>. The defined version identifiers <b>710</b>-<b>1</b>-<i>k </i>may be dynamically modified for each application program <b>106</b>-<b>1</b>-<i>b </i>to reflect any modifications or changes to versions or permission policies implemented by the computing device <b>110</b>-<b>2</b>. As such, the defined version identifiers <b>710</b>-<b>1</b>-<i>k </i>may be directly used to control updates for the computing device <b>110</b>-<b>1</b> and/or access to the computing device <b>110</b>-<b>2</b>.
p-0069The permission manager <b>125</b> may generate a communication response based on the comparison results. In one embodiment, for example, the permission manager <b>125</b> may generate a communication response granting the communication request when one or more current file version identifiers <b>316</b>-<b>1</b>-<i>g </i>are greater than or equal to one or more defined version identifiers <b>710</b>-<b>1</b>-<i>k. </i>In one embodiment, for example, the permission manager <b>125</b> may generate a communication response denying the communication request when the one or more current file version identifiers <b>316</b>-<b>1</b>-<i>g </i>are less than the one or more defined version identifiers <b>710</b>-<b>1</b>-<i>k. </i>
p-0070When granted permission, the application program <b>106</b>-<b>1</b> may send a message <b>712</b> to the computing device <b>110</b>-<b>2</b> implementing various server applications or web services, such as an online storage service <b>720</b>, a social network service <b>730</b>, and so forth. Other server programs may further include, for example, network application programs such as search applications, document management programs, weblogs (blogs), word processing programs, spreadsheet programs, database programs, drawing programs, document sharing programs, message applications, web services, web applications, web server, and/or other types of programs, applications, or services consistent with the described embodiments.
p-0071<figref idrefs="DRAWINGS">FIG. 8</figref> illustrates an embodiment of an exemplary computing architecture <b>800</b> suitable for implementing various embodiments as previously described. The computing architecture <b>800</b> includes various common computing elements, such as one or more processors, co-processors, memory units, chipsets, controllers, peripherals, interfaces, oscillators, timing devices, video cards, audio cards, multimedia input/output (I/O) components, and so forth. The embodiments, however, are not limited to implementation by the computing architecture <b>800</b>.
p-0072As shown in <figref idrefs="DRAWINGS">FIG. 8</figref>, the computing architecture <b>800</b> comprises a processing unit <b>804</b>, a system memory <b>806</b> and a system bus <b>808</b>. The processing unit <b>804</b> can be any of various commercially available processors. Dual microprocessors and other multi-processor architectures may also be employed as the processing unit <b>804</b>. The system bus <b>808</b> provides an interface for system components including, but not limited to, the system memory <b>806</b> to the processing unit <b>804</b>. The system bus <b>808</b> can be any of several types of bus structure that may further interconnect to a memory bus (with or without a memory controller), a peripheral bus, and a local bus using any of a variety of commercially available bus architectures.
p-0073The system memory <b>806</b> may include various types of memory units, such as read-only memory (ROM), random-access memory (RAM), dynamic RAM (DRAM), Double-Data-Rate DRAM (DDRAM), synchronous DRAM (SDRAM), static RAM (SRAM), programmable ROM (PROM), erasable programmable ROM (EPROM), electrically erasable programmable ROM (EEPROM), flash memory, polymer memory such as ferroelectric polymer memory, ovonic memory, phase change or ferroelectric memory, silicon-oxide-nitride-oxide-silicon (SONOS) memory, magnetic or optical cards, or any other type of media suitable for storing information. In the illustrated embodiment shown in <figref idrefs="DRAWINGS">FIG. 8</figref>, the system memory <b>806</b> can include non-volatile memory <b>810</b> and/or volatile memory <b>812</b>. A basic input/output system (BIOS) can be stored in the non-volatile memory <b>810</b>.
p-0074The computer <b>802</b> may include various types of computer-readable storage media, including an internal hard disk drive (HDD) <b>814</b>, a magnetic floppy disk drive (FDD) <b>816</b> to read from or write to a removable magnetic disk <b>818</b>, and an optical disk drive <b>820</b> to read from or write to a removable optical disk <b>822</b> (e.g., a CD-ROM or DVD). The HDD <b>814</b>, FDD <b>816</b> and optical disk drive <b>820</b> can be connected to the system bus <b>808</b> by a HDD interface <b>824</b>, an FDD interface <b>826</b> and an optical drive interface <b>828</b>, respectively. The HDD interface <b>824</b> for external drive implementations can include at least one or both of Universal Serial Bus (USB) and IEEE 1384 interface technologies.
p-0075The drives and associated computer-readable media provide volatile and/or nonvolatile storage of data, data structures, computer-executable instructions, and so forth. For example, a number of program modules can be stored in the drives and memory units <b>810</b>, <b>812</b>, including an operating system <b>830</b>, one or more application programs <b>832</b>, other program modules <b>834</b>, and program data <b>836</b>. The one or more application programs <b>832</b>, other program modules <b>834</b>, and program data <b>836</b> can include, for example, the message applications <b>104</b>-<b>1</b>-<i>b </i>for the computing devices <b>110</b>-<b>1</b>-<i>a. </i>When the computing architecture is implemented for the computing devices <b>110</b>-<b>1</b>, <b>110</b>-<b>2</b> and/or the update server <b>140</b>, the one or more application programs <b>832</b>, other program modules <b>834</b>, and program data <b>836</b> can include, for example, the application programs <b>106</b>-<b>1</b>-<i>b, </i>update component <b>120</b>, update manager <b>142</b>, and so forth.
p-0076A user can enter commands and information into the computer <b>802</b> through one or more wire/wireless input devices, for example, a keyboard <b>838</b> and a pointing device, such as a mouse <b>840</b>. Other input devices may include a microphone, an infra-red (IR) remote control, a joystick, a game pad, a stylus pen, touch screen, or the like. These and other input devices are often connected to the processing unit <b>804</b> through an input device interface <b>842</b> that is coupled to the system bus <b>808</b>, but can be connected by other interfaces such as a parallel port, IEEE 1384 serial port, a game port, a USB port, an IR interface, and so forth.
p-0077A monitor <b>844</b> or other type of display device is also connected to the system bus <b>808</b> via an interface, such as a video adaptor <b>846</b>. In addition to the monitor <b>844</b>, a computer typically includes other peripheral output devices, such as speakers, printers, and so forth.
p-0078The computer <b>802</b> may operate in a networked environment using logical connections via wire and/or wireless communications to one or more remote computers, such as a remote computer <b>848</b>. The remote computer <b>848</b> can be a workstation, a server computer, a router, a personal computer, portable computer, microprocessor-based entertainment appliance, a peer device or other common network node, and typically includes many or all of the elements described relative to the computer <b>802</b>, although, for purposes of brevity, only a memory/storage device <b>850</b> is illustrated. The logical connections depicted include wire/wireless connectivity to a local area network (LAN) <b>852</b> and/or larger networks, for example, a wide area network (WAN) <b>854</b>. Such LAN and WAN networking environments are commonplace in offices and companies, and facilitate enterprise-wide computer networks, such as intranets, all of which may connect to a global communications network, for example, the Internet.
p-0079When used in a LAN networking environment, the computer <b>802</b> is connected to the LAN <b>852</b> through a wire and/or wireless communication network interface or adaptor <b>856</b>. The adaptor <b>856</b> can facilitate wire and/or wireless communications to the LAN <b>852</b>, which may also include a wireless access point disposed thereon for communicating with the wireless functionality of the adaptor <b>856</b>.
p-0080When used in a WAN networking environment, the computer <b>802</b> can include a modem <b>858</b>, or is connected to a communications server on the WAN <b>854</b>, or has other means for establishing communications over the WAN <b>854</b>, such as by way of the Internet. The modem <b>858</b>, which can be internal or external and a wire and/or wireless device, connects to the system bus <b>808</b> via the input device interface <b>842</b>. In a networked environment, program modules depicted relative to the computer <b>802</b>, or portions thereof, can be stored in the remote memory/storage device <b>850</b>. It will be appreciated that the network connections shown are exemplary and other means of establishing a communications link between the computers can be used.
p-0081The computer <b>802</b> is operable to communicate with wire and wireless devices or entities using the IEEE 802 family of standards, such as wireless devices operatively disposed in wireless communication (e.g., IEEE 802.11 over-the-air modulation techniques) with, for example, a printer, scanner, desktop and/or portable computer, personal digital assistant (PDA), communications satellite, any piece of equipment or location associated with a wirelessly detectable tag (e.g., a kiosk, news stand, restroom), and telephone. This includes at least Wi-Fi (or Wireless Fidelity), WiMax, and Bluetooth™ wireless technologies. Thus, the communication can be a predefined structure as with a conventional network or simply an ad hoc communication between at least two devices. Wi-Fi networks use radio technologies called IEEE 802.11x (a, b, g, etc.) to provide secure, reliable, fast wireless connectivity. A Wi-Fi network can be used to connect computers to each other, to the Internet, and to wire networks (which use IEEE 802.3-related media and functions).
p-0082Various embodiments may be implemented using hardware elements, software elements, or a combination of both. Examples of hardware elements may include devices, components, processors, microprocessors, circuits, circuit elements (e.g., transistors, resistors, capacitors, inductors, and so forth), integrated circuits, application specific integrated circuits (ASIC), programmable logic devices (PLD), digital signal processors (DSP), field programmable gate array (FPGA), memory units, logic gates, registers, semiconductor device, chips, microchips, chip sets, and so forth. Examples of software elements may include software components, programs, applications, computer programs, application programs, system programs, machine programs, operating system software, middleware, firmware, software modules, routines, subroutines, functions, methods, procedures, software interfaces, application program interfaces (API), instruction sets, computing code, computer code, code segments, computer code segments, words, values, symbols, or any combination thereof. Determining whether an embodiment is implemented using hardware elements and/or software elements may vary in accordance with any number of factors, such as desired computational rate, power levels, heat tolerances, processing cycle budget, input data rates, output data rates, memory resources, data bus speeds and other design or performance constraints, as desired for a given implementation.
p-0083Some embodiments may comprise an article of manufacture. An article of manufacture may comprise a storage medium to store logic. Examples of a storage medium may include one or more types of computer-readable storage media capable of storing electronic data, including volatile memory or non-volatile memory, removable or non-removable memory, erasable or non-erasable memory, writeable or re-writeable memory, and so forth. Examples of the logic may include various software elements, such as software components, programs, applications, computer programs, application programs, system programs, machine programs, operating system software, middleware, firmware, software modules, routines, subroutines, functions, methods, procedures, software interfaces, application program interfaces (API), instruction sets, computing code, computer code, code segments, computer code segments, words, values, symbols, or any combination thereof. In one embodiment, for example, an article of manufacture may store executable computer program instructions that, when executed by a computer, cause the computer to perform methods and/or operations in accordance with the described embodiments. The executable computer program instructions may include any suitable type of code, such as source code, compiled code, interpreted code, executable code, static code, dynamic code, and the like. The executable computer program instructions may be implemented according to a predefined computer language, manner or syntax, for instructing a computer to perform a certain function. The instructions may be implemented using any suitable high-level, low-level, object-oriented, visual, compiled and/or interpreted programming language.
p-0084Some embodiments may be described using the expression “one embodiment” or “an embodiment” along with their derivatives. These terms mean that a particular feature, structure, or characteristic described in connection with the embodiment is included in at least one embodiment. The appearances of the phrase “in one embodiment” in various places in the specification are not necessarily all referring to the same embodiment.
p-0085Some embodiments may be described using the expression “coupled” and “connected” along with their derivatives. These terms are not necessarily intended as synonyms for each other. For example, some embodiments may be described using the terms “connected” and/or “coupled” to indicate that two or more elements are in direct physical or electrical contact with each other. The term “coupled,” however, may also mean that two or more elements are not in direct contact with each other, but yet still co-operate or interact with each other.
p-0086It is emphasized that the Abstract of the Disclosure is provided to comply with 37 C.F.R. Section 1.72(b), requiring an abstract that will allow the reader to quickly ascertain the nature of the technical disclosure. It is submitted with the understanding that it will not be used to interpret or limit the scope or meaning of the claims. In addition, in the foregoing Detailed Description, it can be seen that various features are grouped together in a single embodiment for the purpose of streamlining the disclosure. This method of disclosure is not to be interpreted as reflecting an intention that the claimed embodiments require more features than are expressly recited in each claim. Rather, as the following claims reflect, inventive subject matter lies in less than all features of a single disclosed embodiment. Thus the following claims are hereby incorporated into the Detailed Description, with each claim standing on its own as a separate embodiment. In the appended claims, the terms “including” and “in which” are used as the plain-English equivalents of the respective terms “comprising” and “wherein,” respectively. Moreover, the terms “first,” “second,” “third,” and so forth, are used merely as labels, and are not intended to impose numerical requirements on their objects.
p-0087Although the subject matter has been described in language specific to structural features and/or methodological acts, it is to be understood that the subject matter defined in the appended claims is not necessarily limited to the specific features or acts described above. Rather, the specific features and acts described above are disclosed as example forms of implementing the claims.
Contents4
9 sheets
Sheet 1 Sheet 2 Sheet 3 Sheet 4 Sheet 5 Sheet 6 Sheet 7 Sheet 8 Sheet 9
Every citation, both ways
| Document | Relation | Office | Cited during |
|---|---|---|---|
| EP2782308A4 | Cited by | European Patent Office (EPO) | Examiner |
| US2012311557A1 | Cited by | United States of America | Search report |
| US9378007B2 | Cited by | United States of America | Search report |
| US2012072895A1 | Cited by | United States of America | Pre-grant |
| US9557983B1 | Cited by | United States of America | Search report |
| US10212563B2 | Cited by | United States of America | Applicant |
| US9756120B2 | Cited by | United States of America | Applicant |
| US9690563B2 | Cited by | United States of America | Search report |
| US9946557B2 | Cited by | United States of America | Applicant |
| US9250888B2 | Cited by | United States of America | Search report |
| US2014259001A1 | Cited by | United States of America | Pre-grant |
| WO2022022803A1 | Cited by | World Intellectual Property Organization (WIPO) | International search |
| US10558819B2 | Cited by | United States of America | Applicant |
| CN111381841A | Cited by | China | Search report |
| CN108829587A | Cited by | China | Search report |
| US10861081B2 | Cited by | United States of America | Applicant |
| US9182975B2 | Cited by | United States of America | Search report |
| US2013339942A1 | Cited by | United States of America | Pre-grant |
| CN110837377A | Cited by | China | Search report |
| US8769526B2 | Cited by | United States of America | Search report |
| US2018074812A1 | Cited by | United States of America | Search report |
| CN107864177A | Cited by | China | Search report |
| US10387136B2 | Cited by | United States of America | Search report |
| US9158525B1 | Cited by | United States of America | Search report |
| US2012144382A1 | Cited by | United States of America | Pre-grant |
| US2013179833A1 | Cited by | United States of America | Pre-grant |
| US10929118B2 | Cited by | United States of America | Search report |
| US2015006623A1 | Cited by | United States of America | Pre-grant |
| US2019028868A1 | Cited by | United States of America | Search report |
| US8990795B2 | Cited by | United States of America | Search report |
| WO2017107685A1 | Cited by | World Intellectual Property Organization (WIPO) | International search |
| US10097975B2 | Cited by | United States of America | Applicant |
| CN106125887A | Cited by | China | Search report |
| US9733919B2 | Cited by | United States of America | Applicant |
| US9189130B2 | Cited by | United States of America | Search report |
| US10225145B2 | Cited by | United States of America | Applicant |
| US10447814B2 | Cited by | United States of America | Applicant |
| US2015067668A1 | Cited by | United States of America | Search report |
| US8850406B1 | Cited by | United States of America | Search report |
| US9672027B2 | Cited by | United States of America | Search report |
| US8146075B2 | Cited by | United States of America | Search report |
| US10489146B2 | Cited by | United States of America | Search report |
| US2015067668A1 | Cited by | United States of America | Search report |
| US11144297B2 | Cited by | United States of America | Applicant |
| CN111596941A | Cited by | China | Search report |
| US10467331B2 | Cited by | United States of America | Applicant |
| CN112486539A | Cited by | China | Search report |
| US2016011864A1 | Cited by | United States of America | Search report |
| US10095507B1 | Cited by | United States of America | Applicant |
| CN105677430A | Cited by | China | Search report |
| US2012311557A1 | Cited by | United States of America | Pre-grant |
| US2014149975A1 | Cited by | United States of America | Pre-grant |
| US2018081670A1 | Cited by | United States of America | Search report |
| US9894461B2 | Cited by | United States of America | Search report |
| US2016306621A1 | Cited by | United States of America | Pre-grant |
| US9390239B2 | Cited by | United States of America | Search report |
| US10694353B2 | Cited by | United States of America | Applicant |
| US10970758B2 | Cited by | United States of America | Applicant |
| US2012017205A1 | Cited by | United States of America | Pre-grant |
| US2016011864A1 | Cited by | United States of America | Pre-grant |
| CN111736859A | Cited by | China | Search report |
| US10817929B1 | Cited by | United States of America | Applicant |
| US2015178483A1 | Cited by | United States of America | Pre-grant |
| US9667515B1 | Cited by | United States of America | Search report |
| US11122403B2 | Cited by | United States of America | Applicant |
| US2013311599A1 | Cited by | United States of America | Pre-grant |
| CN114500501A | Cited by | China | Search report |
| US2015220323A1 | Cited by | United States of America | Pre-grant |
| US2016309280A1 | Cited by | United States of America | Pre-grant |
| US10395054B2 | Cited by | United States of America | Search report |
| US2013019235A1 | Cited by | United States of America | Pre-grant |
| WO2014176048A1 | Cited by | World Intellectual Property Organization (WIPO) | International search |
| US9600268B1 | Cited by | United States of America | Applicant |
| US9699028B2 | Cited by | United States of America | Applicant |
| US11375043B2 | Cited by | United States of America | Search report |
| US8893116B2 | Cited by | United States of America | Search report |
| CN110275819A | Cited by | China | Search report |
| US10671373B1 | Cited by | United States of America | Search report |
| US2013185709A1 | Cited by | United States of America | Pre-grant |
| US10708736B2 | Cited by | United States of America | Search report |
| US9442711B2 | Cited by | United States of America | Search report |
| US10761833B2 | Cited by | United States of America | Applicant |
| US2003135638A1 | Cites | United States of America | Pre-grant |
| US2003159135A1 | Cites | United States of America | Pre-grant |
| US2003177285A1 | Cites | United States of America | Pre-grant |
| US2004044774A1 | Cites | United States of America | Pre-grant |
| US2004123283A1 | Cites | United States of America | Pre-grant |
| US2005144141A1 | Cites | United States of America | Pre-grant |
| US2006161462A1 | Cites | United States of America | Pre-grant |
| US2007118507A1 | Cites | United States of America | Pre-grant |
| US2007288389A1 | Cites | United States of America | Pre-grant |
| US2008028389A1 | Cites | United States of America | Pre-grant |
| US2008208957A1 | Cites | United States of America | Pre-grant |
| US2008301672A1 | Cites | United States of America | Pre-grant |
| US2009007091A1 | Cites | United States of America | Pre-grant |
| US2009037523A1 | Cites | United States of America | Pre-grant |
| US2010067035A1 | Cites | United States of America | Pre-grant |
| GB2437104A | Cites | United Kingdom | Pre-grant |
| US5832483A | Cites | United States of America | Pre-grant |
| US6748555B1 | Cites | United States of America | Pre-grant |
2 priority claims, no other members on record
Priority claims2
| Document | Office | Kind | Date |
|---|---|---|---|
| 78316110 | United States of America | A | |
| US20100783161 | – | – | – |
3 legal events, as the office reported them to INPADOC
Over the term
Point at a mark for the eventEvents
| Event | Code | |
|---|---|---|
| Information on status: application discontinuationABANDONED -- FAILURE TO RESPOND TO AN OFFICE ACTIONSTCB | STCB | |
| AssignmentAS | AS | |
| AssignmentAS | AS |
Numbers
- Publication
- 20110289499
- Publication, DOCDB
- 2011289499
- Publication, EPODOC
- US2011289499
- Application
- 12783161
- Application, DOCDB
- 78316110
- Application, EPODOC
- US20100783161
Titles
- English
- TECHNIQUES TO AUTOMATICALLY UPDATE SOFTWARE APPLICATIONS
Classification
- CPC, 1
- G06F8/65
- IPC, 1
- G06F9 44
- USPC, 1
- 717173000