Relationships Among Updates
There are several relationships that can be defined among updates.
Bundle – A container for updates. Updates that declare a bundle relationship cannot have applicability rules or payloads. If update A bundles updates B and C, then installing A will install B and C if both are applicable on the client machine. In general, a bundle is offered for installation if the client detects at least one bundled child as Needed. During installation, all applicable child updates are installed in the order specified by the bundle. If an installation failure occurs for any of the children, the install of the bundle stops at that point (with no roll-back).
Prerequisite – A prerequisite dependency. If update A has a prerequisite on update B (which is typically a detectoid), and B is not installed, then A cannot be installed. For example, an update for Windows XP SP1 has a prerequisite on a detectoid that checks for the presence of Windows XP SP1.
Supersede – An update that subsumes the functionality of another update. For example, Windows XP SP2 supersedes a number of updates for Windows XP RTM. If update A supersedes update B, and both are applicable to a given client machine, then Automatic Updates will install only update A. Declaring a supersede relationship allows newer and older updates to be used together without conflict.
The bundle relationship specifies a number of child updates that must be co-installed with this update. To add child updates to a bundle, add their GUIDs to the property BundledPackages. The XML looks like this:
<BundledPackages> <PackageID>IdOfBundledPackage<PackageID/> … <PackageID>IdOfBundledPackage<PackageID/> </BundledPackages>
Bundles are used only as containers for other updates. They cannot have applicability rules or update binaries themselves. However, the same effect can be achieved by moving those parts of the update to a required bundled child with the desired applicability rules, or by having the bundle declare a prerequisite relationship on a detectoid.
A bundle is offered for installation if the client detects at least one bundled child as Needed. During installation, all applicable child updates are installed in the order specified by the bundle. If an install failure occurs for any of the children, the install of the bundle stops at that point (with no roll-back).
|If a bundled child is revised and re-imported to the server, the bundle must be re-imported also, so that the bundle will reference the correct revision of the bundled child.|
|Bundles and drivers with more than 1 hardware ID will not flow to WSUS 3.0 RTM or WSUS 2.0 child servers.|
The prerequisite relationship specifies a number of child updates that must have been installed already in order for this update to be considered applicable.
The prerequisite relationship serves two purposes:
It allows common applicability rules to be consolidated into detection-only updates called detectoids, rather than duplicating the applicability rules in all the updates that need them.
It is used to prune content during client-server communications. When the client synchronizes from the server, it gets only those updates whose prerequisites are satisfied. So it is important to design your detectoid hierarchies carefully. You should make sure sufficient prerequisites are defined to reduce the number of non-applicable updates that are downloaded to a given client computer.
A prerequisite is a logical expression of the form (P1 | P2 | …) & (Q1 | Q2 | …) & …., which enables us to build expressions like: (IA64) & (XP RTM | XP SP1) to describe a 64-bit patch for Windows XP that was fixed in Service Pack 2. To add prerequisites to an update, use the property Prerequisites. The Prerequisites element contains zero or more required prerequisite clauses in the following format:
<Prerequisites> <AtLeastOne> <PackageID>IdOfPrerequisitePackage<PackageID/> … <PackageID>IdOfPrerequisitePackage<PackageID/> <AtLeastOne> </Prerequisites>
At least one update in the AtLeastOne clause must be installed in order for the prerequisite clause to be satisfied. It is not necessary for all prerequisites to be installed for the prerequisite to be satisfied, but at least one update from each prerequisite clause must be installed.
The supersede relationship specifies a number of updates whose functionality is subsumed by this update. For example, a service pack may supersede a number of updates. Declaring a supersede relationship allows newer and older updates to appear together without conflict. If update A supersedes update B, and both are applicable to a given client machine, then Automatic Updates will install only update A.
The SupersededPackages element contains zero or more superseded updates in the following format: <SupersededPackages> <PackageID>IdOfSupersededPackage<PackageID/> … <PackageID>IdOfSupersededPackage<PackageID/> </SupersededPackages>