App-V 5: On the Catalog and Catalog Caching
The App-V 5 catalog is the client collection of package information and package group (Connection Groups) information organized by GUID containing downloaded package manifests and dynamic configuration. The metadata stored in the catalog governs the overall behavior of the application with regards to virtual operations and operating system integration. The catalogs are divided up by the global machine catalog (packages deployed machine-wide – globally published) and the user catalog (targeted to the user.)
The catalog locations are as follows:
- Packages: %ProgramData%MicrosoftAppVClientCatalogPackages
- Connection Groups: %ProgramData%MicrosoftAppVClientCatalogPackageGroups
- Packages: %AppData%MicrosoftAppVClientCatalogPackages
- Connection Groups: %AppData%MicrosoftAppVClientCatalogPackageGroups
Unlike options with integration and VFS folders which has both local romaing AppData settings, the Catalog is always set to roam with AppData for user-published packages.
XML components vary between user and machine catalogs.
The default location of the machine catalog is in %ProgramData%MicrosoftAppVClientCatalog. For each package there is a:
- Manifest.xml – This will be here regardless of publishing target.
- DeploymentConfiguration.xml – This will also be here regardless of publishing target.
- UserManifest.xml – This will be present if the package is globally published.
- UserDeploymentConfiguration.xml – This will also be present if the package is globally published.
For each connection group, there is a:
- PackageGroupDescriptor.xml – This will be here regardless of connection group target. It is created upon Add/Configure operation. This is a copy of the Connection Group descriptor document. It come either manually or delivered via the management system (App-V publishing server or Configuration Manager.)
- UserPackageGroupDescriptor.xml – This will be present if the connection group is globally published.
The default location of the user catalog is in %AppData%MicrosoftAppVClientCatalog. For each package, in the user catalog, there is a:
- UserManifest.xml – Always present and generated from the base manifest within the machine catalog but not identical.
- DynamicConfiguration.xml – If additional dynamic user configuration has been supplied. If not then there will be a default UserDeploymentConfiguration.xml
For each connection group, there is a:
- UserPackageGroupDescriptor.xml – A copy of the connection group descriptor document.
One way to tell if the packages and or connection groups have been properly published, will be the presence of the Dynamic Configuration or descriptor documents.
Catalog Operations on Package Add/Configure
When a package is added or Configured, a deployment configuration file and a package manifest are created for each package and package version regardless of how the package will be published. The manifest in the machine catalog is copied out of the immutable package cache location. There will always be a Dynamic Configuration document in the Catalog, even if one is not specified manually (through PowerShell Add-AppVClientPackage) or through the delivery system.
Catalog Operations on Package Publish
The UserManifest.xml, UserDeploymentConfiguration.xml, and UserPackageGroupDescriptor.xml documents are created in the catalog during the publishing operations for packages and connection groups. For all of the documents that are generated by the App-V publishing server, these will have time stamps that correlate to the time stamps on the publishing metadata contained on the server.
Catalog registrations are stored as follows:
- Global Packages: HKLMSOFTWAREMicrosoftAppVClientPackage<GUID><GUID>Catalog
- Global Connection Groups: HKLMSOFTWAREMicrosoftAppVClientPackageGroups<GUID><GUID>Catalog
- User Packages: HKCUSOFTWAREMicrosoftAppVClientPackageGroups<GUID><GUID>Catalog
- User Connection Groups: HKCUSOFTWAREMicrosoftAppVClientPackageGroups<GUID><GUID>Catalog
The machine catalog registrations contain the local package store folder and the publishing source. The user catalog only contains the publishing source. All registrations contain policy file timestamp.
There are two registry values that govern the behavior of client catalog caching found in HKLMSOFTWAREMicrosoftAppVClientCatalog
- CacheMachineData: DWORD value defaults to 1 – enabled.
- CacheUserData: DWORD value defaults to 0 – disabled.
When a value is enabled, the catalog is cached and remains even after the package is unpublished. In the case of machine catalog information, this is the behavior on default. In the case of user catalog data, it is removed when a user-targeted package is unpublished or a user-targeted connection group is disabled. When a package is removed, the machine catalog information is also removed regardless of these settings.
Lingering Catalogs can prove problematic if they persist past a system reset in those non-persistent environments where the App-V catalog may reside on a persistent disk. You may find errors in the App-V Client service failing to start. The quick solution to this is to either ensure that the catalog root is located on a non-persistent disk, or simply remove the dead catalog upon system reset.