3.2.5.3 Software Action Determination

For an applicable application, the following rules MUST be used to decide what action to take on the client:

  1. If the PackageRegistration object has the ACTFLG_Uninstall flag set in the packageFlags field, the client MUST attempt to remove it if it is installed on the client.

  2. If the local client state for a software package has an OutOfScopeBehavior corresponding to the definition of ACTFLG_UninstallOnPolicyRemoval in section 2.2.2.4.3, packageFlags Attribute Values, and the application corresponding to that state's PackageId was not retrieved during policy application, the application MUST be removed.

  3. If the local client state for a software package has an OutOfScopeBehavior corresponding to the definition of ACTFLG_OrphanOnPolicyRemoval in section 2.2.2.4.3, packageFlags Attribute Values, and the application corresponding to that state's PackageId was not retrieved during policy application, the application's software deployment in the software deployment list of the client's abstract data model MUST be deleted from any state for that model. This causes any such application that has already been installed on the client to no longer be affected by the Group Policy: Software Installation Protocol Extension.

  4. If the canUpgradeScript attribute of another PackageRegistration object retrieved during this protocol sequence references the objectGUID attribute of this object, this application MUST be ignored.

  5. If the canUpgradeScript attribute contains a value with an objectGUID for an application from a PackageRegistration object that was previously installed by the client, the client MUST attempt to install the application.

  6. If this object and another PackageRegistration object retrieved during this protocol sequence both reference each other by objectGUID in the canUpgradeScript attribute, only the PackageRegistration object from the higher precedence GPO MUST be installed. The others MUST be ignored.

  7. If this PackageRegistration object has a packageFlags field with ACTFLG_Assigned and is not upgraded by another application, the client MUST attempt to install it.

  8. If this PackageRegistration object has a packageFlags field with ACTFLG_Orphan, the client MUST ignore the application and remove any state on the client associated with it.

  9. If this PackageRegistration object's revision attribute is greater than that seen by the client during a previous protocol sequence, the client MUST attempt to reinstall the application.

  10. Clients MUST evaluate software package modification files with lower <OrderIndex> values in the msiFileList attribute before those with higher values when installing the software or modifying the software deployment.

For any application that is ignored, there SHOULD be no further protocol generated for it.<17>