Delivery Controller 1912 LTSR CU3 and Licensing

Last Modified: Sep 17, 2021 @ 1:03 pm


💡 = Recently Updated

Change Log


If you are performing a new install of Delivery Controller, then skip to the next section.

Starting in August 2018, XenApp and XenDesktop is renamed to Citrix Virtual Apps and Desktops (CVAD) and Versioning changed to YYMM format.

You can in-place upgrade directly from any Delivery Controller version 7.0 or newer. Citrix recommends upgrading Delivery Controller 5.6 to 7.6 LTSR Cumulative Update 6 before upgrading to 1912 Cumulative Update 3.

During the upgrade of Delivery Controller, be aware that a database upgrade is required. Either get a DBA to grant you temporary sysadmin permission, or use Citrix Studio to generate SQL scripts that a DBA must then run in SQL Studio.

  1. NVIDIA – ensure your NVIDIA Virtual GPU software supports the version of CVAD that you are upgrading to.
  2. Consider Utilizing Local Host Cache for Nondisruptive Database Upgrades at Citrix Docs.
  3. License Server Upgrade – Before upgrading to Delivery Controller 1912 Cumulative Update 3, if you have a standalone Citrix Licensing Server, upgrade it to Build 36000. The Delivery Controllers will be non-functional until you upgrade the License Server.

    • You can run LicServVerify.exe from the Citrix Virtual Apps and Desktops (CVAD) ISO to verify that the License Server is compatible. Example syntax is: "E:\x64\XenDesktop Setup\LicServVerify.exe" -h myLicenseServer -p 27000 -v

  4. LTSR – Citrix Virtual Apps and Desktops (CVAD) 1912 Cumulative Update 3 is a Long Term Support Release (LTSR), which receives periodic (usually twice per year) Cumulative Updates with bug fixes, but no new features. See Lifecycle Milestones for Citrix Virtual Apps & Citrix Virtual Apps and Desktops.
  5. Delivery Controller OS Compatibility – 1912 Cumulative Update 3 Delivery Controller is supported on Windows Server 2019, Windows Server 2016, and Windows Server 2012 R2.
    • Windows Server 2008 R2 is no longer supported.
  6. VDA OS Compatibility – Virtual Delivery Agent (VDA) 1912 Cumulative Update 3 is only supported on a limited number of Windows operating system versions, specifically, Windows 10 (1607+), Windows Server 2012 R2, Windows Server 2016, and Windows Server 2019.
    • If you have older VDA machines running Windows 7 or Windows Server 2008 R2, you can leave their VDA software at version 7.15 (with latest Cumulative Update). Citrix supports VDA 7.15 to communicate with Delivery Controllers 1912 Cumulative Update 3.
  7. SQL Server Express LocalDB – the 1912 Cumulative Update 3 Delivery Controller installer does not upgrade the Local Host Cache database engine. After the Delivery Controller is upgraded to 1912 Cumulative Update 3, see Replace SQL Server Express LocalDB at Citrix Docs.
  8. SCOM Agent – If StoreFront is installed on the Controller, and if the Citrix SCOM Agent for StoreFront is installed, stop the Citrix MPSF Agent service. See CTX220935 Cannot Perform a StoreFront Upgrade if Citrix SCOM Management Pack Agent Service is Running.
  9. Close PowerShell and Consoles. Make sure all Citrix Consoles and PowerShell consoles are closed. StoreFront won’t upgrade if any are running. If StoreFront fails, then the StoreFront configuration is wiped out and you’ll have to revert to snapshot.
  10. Other Users – Use Task Manager > Users tab to logoff any other user currently logged into the machine.
  11. Snapshot. If StoreFront is installed on the Delivery Controller, take a snapshot before attempting the upgrade.
  12. Download the Citrix Virtual Apps and Desktops 7 1912 LTSR CU3 ISO.
  13. Run AutoSelect.exe from the 1912 CU3 ISO.
  14. On the top left, in the Upgrade section, click Studio and Server Components.
  15. In the Licensing Agreement page, select I have read, understand, and accept the terms, and click Next.
  16. In the Ensure Successful Upgrade page, read the steps, check the box next to I’m ready to continue, and click Next.
  17. If you see a License Errors page, then you need to upgrade your License Server.
  18. In the Preliminary Site Tests page, click Start Preliminary Tests.
  19. The tests will take a few minutes. Click Next when done.
  20. In the Firewall page, click Next.
  21. In the Summary page, click Upgrade.
  22. If you see a Running Processes window, close the listed programs, and click Continue.
  23. Click OK when asked to start the upgrade.
  24. The machine will probably reboot a couple times.

    1. After the reboot, and after logging in again, you might see a Locate ‘Citrix Virtual Apps and Desktops 7 LTSR CU3’ installation media window. Don’t click anything yet.
    2. Go to the Citrix_Virtual_Apps_and_Desktops_7_1912_3000.iso file and mount it.
    3. Go back to the Locate ‘Citrix Virtual Apps and Desktops 7 LTSR CU3’ installation media window.
    4. On the left, expand This PC, and click the DVD Drive.
    5. Click Select Folder.
    6. Installation will resume. Repeat these instructions after each reboot.
  25. If the upgrade fails:
    1. Look for MetaInstaller log files under %localappdata%\Temp\Citrix\XenDesktop Installer\MSI Log Files.
    2. Look for StoreFront log files under C:\Program Files\Citrix\Receiver StoreFront\Admin\logs.
    3. Citrix has a MSI Log Analyzer.
  26. In the Diagnostics page, you can optionally enable Collect diagnostic information (aka Call Home). If so, click Connect and login with a Citrix Cloud account. See Citrix Insight Services at Citrix Docs for more information on this feature.
  27. In the Finish page, check the box next to Launch Studio, and click Finish.
  28. SQL Server Express LocalDB – the 1912 CU3 Delivery Controller installer does not upgrade the Local Host Cache database engine. After the Delivery Controller is upgraded to 1912 CU3, see Replace SQL Server Express LocalDB at Citrix Docs.

Studio – Upgrade Database, Catalogs, and Delivery Groups

  1. After Citrix Studio launches, if you have sysadmin permissions on SQL, then click Start the automatic Site upgrade. If you don’t have full SQL permission, then get a DBA to help you, click Manually upgrade this site, and follow the instructions.

    • If you choose to Manually upgrade this site, then note that there might not be an upgrade for the Logging Database schema, depending on what version you are upgrading from.

    • Run the DisableServices.ps1 script before upgrading the database.
    • The .sql scripts must be run in SQLCMD mode. Re-enable SQLCMD mode for each script.
  2. After all Controllers and VDAs are upgraded, in Citrix Studio, view your Catalog for the current functional level (Set to VDA version). Citrix Virtual Apps and Desktops (CVAD) 1912 let you upgrade your Catalogs and Delivery Groups to functional level 1811.

    1. Provisioning – Don’t upgrade the Catalog or Delivery Group until all VDAs with the Catalog and Delivery Group to 1811 if you are using Provisioning Services. See Citrix Provisioning Services Known Issues at Citrix Docs.
    2. Don’t upgrade the Catalog or Delivery Group until all VDAs with the Catalog and Delivery Group are VDA version 1811 or newer.
    3. Right-click the Catalog, and click Upgrade Catalog.
      Note: you might not see the Upgrade Catalog option until you reboot the Delivery Controller.

    4. Review the message regarding suitability of the upgrade and then click Upgrade.
    5. Then upgrade the Delivery Groups by right-clicking on a Delivery Group and clicking Upgrade Delivery Group.
    6. Review the suitability message and then click Upgrade.

Other Citrix Virtual Apps and Desktops components can also be in-place upgraded:

New Install Preparation

Periodic updates/upgrades

Citrix Virtual Apps and Desktops (CVAD) 1912 is a Long Term Service Release (LTSR).

OS Compatibility

Delivery Controller 1912 Cumulative Update 3 is supported on Windows 2012 R2 and newer, including Windows Server 2019. Windows Server 2008 R2 is no longer supported.

Virtual Delivery Agent (VDA) 1912 Cumulative Update 3 is only supported on a limited number of Windows operating system versions, specifically, Windows 10 (1607+), Windows Server 2012 R2, Windows Server 2016, and Windows Server 2019.

  • If you have older VDA machines running Windows 7 or Windows Server 2008 R2, you can install VDA software version 7.15. Citrix supports VDA 7.15 communicating with Delivery Controller 1912.

Installation Automation

If you want to automate the install of Delivery Controllers, see Dennis Span Citrix Delivery Controller unattended installation with PowerShell and SCCM.

Citrix Licensing

If you are going to use an existing Citrix Licensing Server, then upgrade it to build 36000.

  • You can run LicServVerify.exe from the Citrix Virtual Apps and Desktops (CVAD) ISO to verify that the License Server is compatible. Example syntax is: "E:\x64\XenDesktop Setup\LicServVerify.exe" -h myLicenseServer -p 27000 -v

Multiple License Types – Multiple license types (but not multiple editions) are supported in a single farm. See CTX223926 How to Configure Multiple License Types within a Single XenApp and XenDesktop Site.

SQL Databases for Citrix Virtual Apps and Desktops

  • Citrix article CTX114501 – Supported Databases for XenApp and XenDesktop Components
  • SQL 2019 is supported with CVAD 1912 Cumulative Update 1 and newer. It’s not supported with the base .0 version of CVAD 1912.
  • Citrix CTX209080 Database Sizing Tool for XenDesktop 7
  • Three databases – There are typically three databases: one for the Site (aka farm), one for Logging (audit log) and one for Monitoring (Director).
    • The name of the monitoring database must not have any spaces in it. See CTX200325 Database Naming Limitation when Citrix Director Accesses Monitoring Data Using OData APIs
    • If you want Citrix Studio to create the SQL databases automatically, then the person running Studio must be a sysadmin on the SQL instances. No lesser SQL role will work. sysadmin permissions can be granted temporarily and revoked after installation.
    • Alternatively, you can use Citrix Studio to create SQL scripts and then ask a DBA to run those scripts on the SQL server. In that case, the person running the scripts only needs the dbcreator and securityadmin roles.
    • It is possible to create the three databases in advance. However, you must use the non-default collation named Latin1_General_100_CI_AS_KS
  • SQL High Availability Options:
    • Basic Availability Groups – Build two SQL 2016 (or newer) Standard Edition servers, and create three Basic Availability Groups, one for each database. Each Basic Availability Group has its own Listener.
    • Database Mirroring – Build two SQL 2014 or older Standard Edition servers, and configure Database Mirroring.
    • AlwaysOn Availability Group – Build two SQL Enterprise Edition servers, and create one AlwaysOn Availability Group with one Listener.
    • Failover Clustering – Build two SQL Enterprise Edition servers, and configure SQL Database Failover Clustering.
  • Cloud – Azure SQL is not supported. AWS RDS is supported by AWS, but not by Citrix. You’ll need to build your own SQL Servers on IaaS VMs.

Windows Feature

Installing Group Policy Management (GPMC) on the Delivery Controllers lets you edit Citrix-targeted Group Policy Objects (GPOs) directly from the Delivery Controllers.

Citrix has a Citrix Group Policy Management Plug-in that adds the Citrix Policies node to the Group Policy Editor. The Citrix Group Policy Management Plug-in is included with the installation of Citrix Studio, meaning that running GPMC on the Delivery Controller automatically grants you access to the Citrix Policies node in the GPOs. If you edit GPOs on a machine that doesn’t have Citrix Studio installed, then you won’t see the Citrix Policies node in GPOs until you manually install the Citrix Group Policy Management Plug-in.

vCenter Service Account

Create a role in vSphere Client. Assign a service account to the role at the vCenter Datacenter or higher level. Delivery Controller will use this service account to login to vCenter.

Delivery Controller New Install

  1. A typical size for the Controller VMs is 2-4 vCPU and 8+ GB of RAM. If all components (Delivery Controller, StoreFront, Licensing, Director, SQL Express) are installed on one server, then you might want to bump up memory to 10 GB or 12 GB. 5 GB is the minimum memory.
  2. From Local Host Cache sizing and scaling at Citrix Docs:
    1. For LHC LocalDB, assign the Controller VMs a single socket with multiple cores. SQL LocalDB uses max four cores on one socket. Configure the Delivery Controller VM with four cores per socket.
    2. Add two cores for LHC.
    3. Add at least three more Gigs of RAM and watch the memory consumption.
    4. Since there’s no control over LHC election, ensure all Controllers in the site/farm have the same specs.
  3. Operating System: Citrix Virtual Apps and Desktops (CVAD) 1912 Cumulative Update 3 is supported on Windows Server 2019, Windows Server 2016, and Windows Server 2012 R2.
  4. Make sure the User Right Log on as a service includes NT SERVICE\ALL SERVICES, or add NT SERVICE\CitrixTelemetryService to the User Right.
  5. Download the Citrix Virtual Apps and Desktops 7 1912 LTSR CU3 ISO.
  6. On two Delivery Controllers, to install the Delivery Controller software, run AutoSelect.exe from the mounted 1912 CU3 ISO.
  7. Click Start next to either Virtual Apps or Virtual Apps and Desktops. The only difference is the product name displayed in the installation wizard.
  8. On the top left, click Delivery Controller.
  9. In the Licensing Agreement page, select I have read, understand, and accept the terms, and click Next.
  10. In the Core Components page, you can install all components on one server, or on separate servers. Splitting out the components is only necessary in large environments, or if you have multiple farms and want to share the Licensing and Director components across those farms. Click Next.
  11. In the Features page, uncheck the box next to Install Microsoft SQL Server 2017 Express CU16, and click Next.
  12. In the Firewall page, click Next.
  13. In the Summary page, click Install.
  14. In the Diagnostics page, you can optionally Collect diagnostic information by clicking Connect and entering your Citrix Cloud or credentials. Click Next.
  15. In the Finish page, click Finish. Citrix Studio will automatically launch.
  16. Ensure the two Delivery Controller VMs do not run on the same hypervisor host. Create an anti-affinity rule at vSphere Cluster > Manage > Settings > DRS Rules > Add. Set the Type to Separate Virtual Machines.
  17. Citrix Tech Zone Endpoint Security and Antivirus Best Practices: provides guidelines for configuring antivirus software in Citrix Virtual Apps and Desktops environments

Create Site – Create Database

There are several methods of creating the databases for Citrix Virtual Apps and Desktops (CVAD):

  • If you have sysadmin permissions to SQL, let Citrix Studio create the databases automatically.
  • If you don’t have sysadmin permissions to SQL, then use Citrix Studio to generate SQL scripts, and send the scripts to a DBA.

Use Citrix Studio to Create the Databases Automatically

  1. Launch Citrix Studio. After it loads, click Deliver applications and desktops to your users.
  2. In the Introduction page, select An empty, unconfigured site. This reduces the number of pages in this Setup wizard. The removed pages will be configured later.
  3. Enter a Site Name (aka farm name), and click Next. Only administrators see the farm name.
  4. In the Databases page, if you are building two Delivery Controllers, click Select near the bottom of the same page.

    1. Click Add.
    2. Enter the FQDN of the second Delivery Controller, and click OK. Note: the Delivery Controller software must already be installed on that second machine.
    3. Then click Save.
  5. If the person running Citrix Studio has sysadmin permissions to the SQL Server, then enter the SQL server name/instance in the three Location fields, and click Next.
  6. If you don’t have sysadmin permission, then jump to the SQL Scripts section below.
  7. On the Licensing page, enter the name of the Citrix License Server, and click Connect. If you installed Citrix Licensing with your Delivery Controller, then simply enter localhost.
  8. If the Certificate Authentication appears, select Connect me, and click Confirm.
  9. Select your license type, and click Next. If you see both User/Device and Concurrent, then you usually must select User/Device licenses. Also see CTX223926 How to Configure Multiple License Types within a Single XenApp and XenDesktop Site.
  10. In the Summary page, if your databases are mirrored or in an Availability Group, each database will show high availability servers, and the name of the Mirror server. Click Finish.

  11. It will take some time for the site to be created.
  12. Once done, skip to the Second Delivery Controller section.

Use Citrix Studio to create SQL scripts

  1. If you don’t have SQL sysadmin permissions, then change the selection to Generate scripts to manually set up databases on the database server. Change the database names if desired, and click Next.
  2. In the Summary page, click Generate scripts.
  3. A folder will open with six scripts. Edit each of the scripts.
  4. Near the top of each script are two lines to create the database. Uncomment both lines (including the go line). Then save and close the file.

  5. Once all of the scripts are edited, you can send them to your DBA.
    1. On the Principal SQL Server, open the file Site_Principal.sql.

    2. Open the Query menu, and click SQLCMD Mode to enable it.
    3. Then execute the script.
    4. If SQLCMD mode was enabled properly, then the output should look something like this:
    5. If you have a mirrored database, run the second script on the mirror SQL instance. Make sure SQLCMD mode is enabled.
    6. Repeat for the Logging_Principal.sql script.
    7. You’ll have to enable SQLCMD Mode for each script you open.

    8. Repeat for the Monitoring_Principal.sql script.
    9. Once again enable SQLCMD Mode.

    10. The person running Citrix Studio must be added to the SQL Server as a SQL Login, and granted the public server role, so that account can enumerate the databases.

  6. Back in Citrix Studio, click the Continue database configuration and Site setup button.
  7. In the Databases page, enter the SQL server name, and instance name, and click Next.

  8. On the Licensing page, enter the name of the Citrix License Server, and click Connect. If you installed Citrix Licensing with your Delivery Controller, then simply enter localhost.
  9. If the Certificate Authentication window appears, select Connect me, and click Confirm.
  10. Then select your license, and click Next. See CTX223926 How to Configure Multiple License Types within a Single XenApp and XenDesktop Site.
  11. In the Summary page, if your databases are mirrored, each database will show high availability servers, and the name of the Mirror server. Click Finish.

  12. It will take some time for the site to be created.

Second Controller

During Site creation, you might have selected more than one Delivery Controller. In that case, simply run Citrix Studio on the already configured additional Delivery Controllers. If Citrix Studio is already open, close it and reopen it to see the farm configuration.

Otherwise, additional Delivery Controllers need to be added to the SQL databases.

  • If you have sysadmin permissions to SQL, let Citrix Studio modify the databases automatically.
  • If you don’t have sysadmin permissions to SQL then use Citrix Studio to generate SQL scripts and send them to a DBA.

To use Citrix Studio to create the SQL Scripts:

  1. On the first Delivery Controller, if StoreFront is installed on the Controller, then delete the default StoreFront store (/Citrix/Store) and recreate it with your desired Store name (e.g. /Citrix/Company).
  2. On the second Delivery Controller machine, install Delivery Controller as detailed earlier.
  3. After installation, launch Citrix Studio on the second controller, and click Connect this Delivery Controller to an existing Site.
  4. Enter the name of the first Delivery Controller, and click OK.
  5. If you don’t have full SQL permissions (sysadmin), click No when asked if you want to update the database automatically.
  6. Click Generate scripts.
  7. A folder will open with six scripts. If not mirroring, then the top three scripts need to be sent to a DBA. If mirroring, send all six.
  8. On the SQL Server, open one of the .sql files.

  9. Open the Query menu, and click SQLCMD Mode.
  10. Then execute the SQL script.
  11. If SQLCMD mode was enabled properly, then the output should look something like this:
  12. Repeat for the remaining script files.
  13. Back in Citrix Studio, click OK.
  14. In Citrix Studio, under Configuration > Controllers, you should see both controllers.

SSL for Delivery Controller

SSL certificates should be installed on each Delivery Controller to encrypt the traffic between StoreFront and Delivery Controller. The traffic between StoreFront and Delivery Controller contains user credentials.

The SSL certificate on each Delivery Controller needs to match the FQDN of the Delivery Controller.

  • If StoreFront is installed on the Delivery Controller, then you have two FQDNs to consider: the Delivery Controller FQDN, and the StoreFront FQDN. Make sure the certificate matches the Delivery Controller FQDN, but it’s usually not necessary for the same certificate to also match the StoreFront FQDN.
    • The StoreFront certificate is usually hosted on a Citrix ADC SSL Load Balancing Virtual Server. Users connect to Citrix ADC instead of directly to the StoreFront servers. The StoreFront certificate only needs to be valid between the user and the ADC.
    • For the connection between ADC and StoreFront server, ADC does not validate the certificate so the certificate on the StoreFront server can be anything. That means you can install a certificate that matches the Delivery Controller FQDN, but there’s no need for the certificate to match the StoreFront FQDN.

To enable SSL for a Delivery Controller:

  1. Run certlm.msc, go to Personal > Certificates, and create or install a server certificate that matches the Delivery Controller’s FQDN. This can be an internally-signed certificate if the StoreFront server trusts internally-signed certificates.
  2. If IIS is installed on the Delivery Controller, then simply run IIS Manager, go to Default Web Site, click Edit Bindings, and add an https binding using the chosen certificate.

If IIS is not installed on the Delivery Controller, then we need to build a command line to bind the certificate to Citrix Broker Service.

  1. Open a command prompt as administrator.
  2. Enter the following text but don’t press Enter yet.
    netsh http add sslcert ipport= certhash=
  3. Right after certhash= paste the certificate thumbprint using the following procedure:
    1. Go to certlm.mscPersonal Certificates.
    2. Double-click the certificate you want to bind.
    3. On the Details tab, scroll down to Thumbprint and copy the thumbprint.
    4. Paste the thumbprint into the command line we’re building.
    5. Remove the special character at the beginning of the thumbprint.
    6. Remove the spaces.
  4. Add the following to the command line:
  5. Michael Shuster at HowTo: Enable SSL on Citrix Delivery Controllers – Easy Method says you can run the following PowerShell to get the Broker Service GUID.
    Get-WmiObject -Class Win32_Product | Select-String -Pattern "broker service"
  6. Paste the GUID for Citrix Broker Service that you got from the Get-WmiObject. Make sure the GUID has curly braces on both sides with no space between appid and the left curly brace.
  7. Press <Enter> to run the command.
  8. If you entered everything correctly, then it should say SSL Certificate successfully added.
  9. To confirm the certificate binding, run the following:
    netsh http show sslcert ipport=

Studio – Slow Launch

From B.J.M. Groenhout at Citrix Discussions: The following adjustments can be made if Desktop Studio (and other Citrix management Consoles) will start slowly:

  • Within Internet Explorer, go to Tools – Internet Options – Tab Advanced – Section Security, and uncheck the option Check for publisher’s certificate revocation

After adjustment Desktop Studio (MMC) will be started immediately. Without adjustment it may take some time before Citrix Studio (MMC) is started.

Registry setting (can be deployed using Group Policy Preferences):

  • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\WinTrust\Trust Providers\Software Publishing
    • State“=dword:00023e00

Concurrent Logon Hard Limit

From Samuel Legrand XenApp 7.14 – (Really) Manage a DR! – Citrix Policies has a setting called Concurrent Logon Tolerance. However, it is not a hard limit, meaning once the limits are reached, it continues to let users connect. You can configure the Controllers to make it a hard limit by setting the following registry value:

  • HKLM\Software\Policies\Citrix\DesktopServer
    • LogonToleranceIsHardLimit (DWORD) = 1

Local Host Cache

If you have 10,000 or fewer VDAs per zone (up to 40,000 VDAs per multi-zone site/farm), you can enable Local Host Cache (LHC) instead of Connection Leasing. LHC allows new sessions to be started even if SQL database is unavailable.

From Local Host Cache sizing and scaling at Citrix Docs:

  1. For LHC LocalDB, assign the Controller VMs a single socket with multiple cores.
  2. Add two cores for LHC.
  3. Add at least three more Gigs of RAM and watch the memory consumption.
  4. Since there’s no control over LHC election, ensure all Controllers have the same specs.
  5. The Docs article has scripts for monitoring LHC performance.

From XenApp 7.12, LHC and a reboot at Citrix Discussions:

  • If the rebooted DDC is the elected one, a different DDC will take over (causing registration storm) and when the DDC gets back, it will take over brokering causing second registration storm. Site will sort itself out and all will work.
  • If the rebooted DDC is not the elected one, it will not impact any functionality.
  • If you turn the DDC down when site is working, and start it during outage, LHC will not trigger on that machine. This DDC will not impact the LHC unless it would become the elected one. In that scenario it will take control, however not start LHC and resources would not be available.

Trentent Tye at Citrix XenDesktop/XenApp 7.15 – The local host cache in action has a video showing LHC in action.

As mentioned by Citrix Docs, make sure PowerShell Execution Policy is set to RemoteSigned, Unrestricted, or Bypass.

If you did a fresh install of 1912 Cumulative Update 3, then Local Host Cache should be enabled by default. In PowerShell, you can run Get-BrokerSite to confirm.

If not enabled, you can run some PowerShell commands to enable Local Host Cache:

Set-BrokerSite -ConnectionLeasingEnabled $false
Set-BrokerSite -LocalHostCacheEnabled $true

George Spiers Local Host Cache XenApp & XenDesktop shows the Event Log entries when LHC is enabled.

Database Maintenance

Enable Read-Committed Snapshot

The Delivery Controller Database can become heavily utilized under load in a large environment. Therefore Citrix recommends enabling the Read_Committed_Snapshot option on the Delivery Controller databases to remove contention on the database from read queries. This can improve the interactivity of Studio and Director. It should be noted that this option may increase the load on the tempdb files. See Citrix article CTX137161 How to Enable Read-Committed Snapshot in XenDesktop for configuration instructions.

Change Database Connection Strings

Sometimes the database connection strings need to be modified:

  • When moving the SQL databases to a different SQL server
  • For AlwaysOn Availability Groups, to add MultiSubnetFailover to the SQL connection strings
  • For SQL mirroring, to add Failover Partner to the SQL connection strings

Here are general instructions for moving the database and assigning the correct permissions:

  1. Backup the three Citrix databases on the original SQL server, and restore them on the new SQL server. See Microsoft’s documentation for details.
  2. In SQL Management Studio > Security > Logins, add the Delivery Controller computer accounts (e.g. CORP\DDC01$)
  3. When adding the SQL Login, on the User Mapping page, select the three Citrix databases (Site database, Monitoring database, and Logging database)
  4. For each of the three Citrix databases, add the Delivery Controller computer account to the various database roles as listed below. The Site database has many more roles than the Logging and Monitoring databases.
    • Site database – ADIdentitySchema_ROLE
    • Site database – Analytics_ROLE (7.8 and newer)
    • Site database – AppLibrarySchema_ROLE (7.8 and newer)
    • Site database – chr_Broker
    • Site database – chr_Controller
    • Site database – ConfigLoggingSchema_ROLE
    • Site database – ConfigLoggingSiteSchema_ROLE
    • Site database – ConfigurationSchema_ROLE
    • Site database – DAS_ROLE
    • Site database – DesktopUpdateManagerSchema_ROLE
    • Site database – EnvTestServiceSchema_ROLE
    • Site database – HostingUnitServiceSchema_ROLE
    • Site database – Monitor_ROLE
    • Site database – MonitorData_ROLE
    • Site database – OrchestrationSchema_ROLE (7.11 and newer)
    • Site database – public
    • Site database – StorefrontSchema_ROLE (7.8 and newer)
    • Site database – TrustSchema_ROLE (7.11 and newer)
    • Monitoring database – Monitor_ROLE
    • Monitoring database – public
    • Logging database – ConfigLoggingSchema_ROLE
    • Logging database – public

From Citrix Docs Update database connection strings when using SQL Server high availability solutions: Citrix offers several PowerShell scripts that update Delivery Controller database connection strings when you are using SQL Server high availability database solutions such as AlwaysOn and mirroring. The scripts, which use the Citrix Virtual Apps and Desktops PowerShell API, are:

  • DBConnectionStringFuncs.ps1: The core script that does the actual work. This script contains common functions that the other scripts use.
  • Change_XD_Failover_Partner_v1.ps1: Updates (adds, changes, or removes) the failover partner. This script prompts for the failover partner location (FQDN) for each database. (Providing a blank failover partner removes the failover partner. You can also use the ClearPartner option to remove a partner.) Do not set the failover partner to the same location as the principal database server.
  • Change_XD_To_ConnectionString.ps1: Uses the provided connection strings to update the connection strings to the databases. This script ensures that certain Citrix services are up and running, and then updates those services in the correct order on all Controllers in the site. Enclose connection string information for each database in quotes.
  • Change_XD_To_MultiSubnetFailover.ps1: Toggles the addition and removal of MultiSubnetFailover=true. If you use AlwaysOn Availability Groups, Microsoft recommends that the connection string include MultiSubnetFailover=true. This option speeds up recovery when a high availability event occurs, and is recommended for both single and multi-subnet environments. Run this script once to add the option. Run the script again to remove it.
  • Change_XD_To_Null.ps1: Resets all the connection strings on the localhost because something has gone wrong. By resetting the connection strings to null, this script places the Controller into an “initial” state. If you run Studio after running this script, you’ll be asked if you want to create a site or join an existing site. This is useful if something has gone wrong and a reset is needed. After the reset, you can try again to set the connection strings.

Here are the DB Connections that must be changed. Make sure you include all of the DB Connections shown below. You can get the full list of database commands by running Get-Command Set-*DBConnection. When changing the DB connections, AdminDBConnection must be the last to be set to NULL, and the first to be configured with the new connection string. Repeat these instructions on all Delivery Controllers in the farm.

Remove the existing Database connections

At the Delivery Controller, open PowerShell as Administrator and run the following commands to clear the existing database connections.

## Disable configuration logging for the XD site:
Set-LogSite -State Disabled

## ## Clear the current Delivery Controller database connections
## Note: AdminDBConnection must be the last command
Set-ConfigDBConnection -DBConnection $null
Set-AppLibDBConnection -DBConnection $null    #7.8 and newer
Set-OrchDBConnection -DBConnection $null      #7.11 and newer
Set-TrustDBConnection -DBConnection $null     #7.11 and newer
Set-AcctDBConnection -DBConnection $null
Set-AnalyticsDBConnection -DBConnection $null # 7.6 and newer
Set-HypDBConnection -DBConnection $null
Set-ProvDBConnection -DBConnection $null
Set-BrokerDBConnection -DBConnection $null
Set-EnvTestDBConnection -DBConnection $null
Set-SfDBConnection -DBConnection $null
Set-MonitorDBConnection -DataStore Monitor -DBConnection $null   #Monitoring Database
Set-MonitorDBConnection -DBConnection $null                      #Site Database
Set-LogDBConnection -DataStore Logging -DBConnection $null       #Logging Database
Set-LogDBConnection -DBConnection $null                          #Site Database
Set-AdminDBConnection -DBConnection $null -force

Specify the new Database connection strings

Run the following commands to set the new connection strings. Adjust the variables to match your desired connection string. For example, if you wish to add “;MultiSubnetFailover=True” to the connection strings, then set the $csSite variable to "Server=$ServerName;Initial Catalog=$SiteDBName;Integrated Security=True;MultiSubnetFailover=True". Repeat this for the $csLogging and $csMonitoring variables.

## Replace <dbserver> with the SQL server name, and instance if present, e.g "ServerName\SQLInstanceName". If no SQL Instance name is mentioned, this commandlet will try to connect to the default SQL instance.
## Replace <dbname> with the name of your restored Database
## Note: AdminDBConnection should be first

$ServerName = "<dbserver>"
$SiteDBName = "<SiteDbName>"
$LogDBName = "<LoggingDbName>"
$MonitorDBName = "<MonitorDbName>"
$csSite = "Server=$ServerName;Initial Catalog=$SiteDBName;Integrated Security=True;MultiSubnetFailover=True"
$csLogging = "Server=$ServerName;Initial Catalog=$LogDBName;Integrated Security=True;MultiSubnetFailover=True"
$csMonitoring = "Server=$ServerName;Initial Catalog=$MonitorDBName;Integrated Security=True;MultiSubnetFailover=True"

Set-AdminDBConnection -DBConnection $csSite
Set-ConfigDBConnection -DBConnection $csSite
Set-AcctDBConnection -DBConnection $csSite
Set-AnalyticsDBConnection -DBConnection $csSite # 7.6 and newer
Set-HypDBConnection -DBConnection $csSite 
Set-ProvDBConnection -DBConnection $csSite
Set-AppLibDBConnection –DBConnection $csSite # 7.8 and newer
Set-OrchDBConnection –DBConnection $csSite # 7.11 and newer
Set-TrustDBConnection –DBConnection $csSite # 7.11 and newer
Set-BrokerDBConnection -DBConnection $csSite
Set-EnvTestDBConnection -DBConnection $csSite
Set-SfDBConnection -DBConnection $csSite
Set-LogDBConnection -DBConnection $csSite
Set-LogDBConnection -DataStore Logging -DBConnection $null
Set-LogDBConnection -DBConnection $null
Set-LogDBConnection -DBConnection $csSite
Set-LogDBConnection -DataStore Logging -DBConnection $csLogging
Set-MonitorDBConnection -DBConnection $csSite
Set-MonitorDBConnection -DataStore Monitor -DBConnection $null
Set-MonitorDBConnection -DBConnection $null
Set-MonitorDBConnection -DBConnection $csSite
Set-MonitorDBConnection -DataStore Monitor -DBConnection $csMonitoring
Set-LogSite -State Enabled

Test the new Database connection strings

Run the following commands to verify connectivity to the database:

## Copy these variables from the previous step
## If you haven’t closed your PowerShell window, then the variables might still be defined. In that case, just run the Test commands
$ServerName = "<dbserver>"
$SiteDBName = "<SiteDbName>"
$LogDBName = "<LoggingDbName>"
$MonitorDBName = "<MonitorDbName>"
$csSite = "Server=$ServerName;Initial Catalog=$SiteDBName;Integrated Security=True"
$csLogging = "Server=$ServerName;Initial Catalog=$LogDBName;Integrated Security=True"
$csMonitoring = "Server=$ServerName;Initial Catalog=$MonitorDBName;Integrated Security=True"

Test-AcctDBConnection -DBConnection $csSite
Test-AdminDBConnection -DBConnection $csSite
Test-AnalyticsDBConnection -DBConnection $csSite # 7.6 and newer
Test-AppLibDBConnection -DBConnection $csSite # 7.8 and newer
Test-BrokerDBConnection -DBConnection $csSite
Test-ConfigDBConnection -DBConnection $csSite
Test-EnvTestDBConnection -DBConnection $csSite
Test-HypDBConnection -DBConnection $csSite
Test-LogDBConnection -DBConnection $csSite
Test-LogDBConnection -DataStore Logging -DBConnection $csLogging
Test-MonitorDBConnection -DBConnection $csSite
Test-MonitorDBConnection -Datastore Monitor -DBConnection $csMonitoring
Test-OrchDBConnection -DBConnection $csSite # 7.11 and newer
Test-ProvDBConnection -DBConnection $csSite
Test-SfDBConnection -DBConnection $csSite
Test-TrustDBConnection -DBConnection $csSite # 7.11 and newer

Director Grooming

If your Citrix Virtual Apps and Desktops is not Premium Edition, then all historical Director data is groomed at 30 days.

For Citrix Virtual Apps and Desktops Premium Edition, by default, most of the historical Director data is groomed at 90 days. This can be adjusted up to 367 days by running a PowerShell cmdlet.

  1. On a Delivery Controller, run PowerShell elevated (as administrator).
  2. Run Get-MonitorConfiguration to see the current grooming settings.
  3. Run Set-MonitorConfiguration to change the grooming settings.

View Logging Database

To view the contents of the Logging Database, in Studio, click the Logging node. On the right is Create Custom Report. See Citrix article CTX138132 Viewing Configuration Logging Data Not Shown for more info.

The Logging Database can be queried using Get-LogLowLevelOperation. See Stefan Beckmann Get user who set maintenance mode for a server or client for an example script that uses this PowerShell cmdlet.

Logging Database Grooming

By default, the Logging Database does not groom old entries. You can enable grooming in Citrix PowerShell by running the Set-LogSite cmdlet with the -LoggingDBPurgeDurationDays parameter. More info at Schedule periodic data deletion at Citrix Docs.

Citrix CTX215069 Troubleshooting and managing Oversized Configuration Logging database: The article’s queries can be used to determine the number of configuration operation types performed by Citrix Virtual Apps and Desktops Administrator, and to analyze the content of the Configuration Logging database when it is considered oversized. A grooming query is also provided to delete data older than a specified date.

Export/Import Configuration

Ryan Butler has a PowerShell script that can export configuration from one Citrix Virtual Apps and Desktops farm and import it to another.

Kaspars Vilde at XenDesktop/XenApp 7.X Applications – Exporting / Importing at Citrix Discussions has scripts to export published apps from one farm and import to another farm.

Studio Administrators

Full Administrators

  1. In the Studio, under Configuration, click the Administrators node. The first time you access the node you’ll see a Welcome page. Feel free to check the box to Don’t show this again, and then click Close.
  2. On the Administrators tab, right-click, and click Create Administrator.
  3. In the Administrator and Scope page, Browse to a group (e.g. Citrix Admins) that will have permissions to Citrix Studio and Director. These groups typically have access to all objects, so select the All scope. Alternatively, you can create a Scope to limit the objects. Click Next.
  4. On the Role page, select a role, and then click Next. For example:
    • Full Administrator for the Citrix Admins group
    • Help Desk Administrator for the Help Desk group
    • Machine Catalog Administrator for the desktop team
  5. In the Summary page, click Finish.

Help Desk

  1. In Citrix Studio, under Configuration, click the Administrators node. On the Administrators tab, right-click, and click Create Administrator.
  2. In the Administrator and Scope page, Browse to a Help Desk group that will have permissions to Citrix Studio and Director. Select the All scope. And click Next.
  3. On the Role page, select the Help Desk Administrator role, and then click Next.
  4. In the Summary page, click Finish.
  5. When administrators in the Help Desk role log into Director, all they see is this.

    To jazz it up a little, add the Help Desk group to the read-only role.
  6. Right-click the Help Desk Administrator, and click Edit Administrator.
  7. Click Add.
  8. In the Scope page, select a scope, and click Next.
  9. In the Role page, select Read Only Administrator, and click Next.
  10. In the Summary page, click Finish.
  11. Then click OK. Now Director will display the dashboard.

Customer Experience Improvement Program

Citrix Virtual Apps and Desktops enables CEIP by default. If desired, you can disable it in Citrix Studio:

  1. On the left, go to the Configuration node.
  2. On the right, switch to the Product Support tab.
  3. Click End.
  4. Click Yes.

Citrix Studio collects data for Google Analytics. You can disable this in the registry at HKLM\Software\Citrix\DesktopStudio\GAEnabled = 0.

Each Citrix Virtual Apps and Desktops component has a separate configuration for disabling Customer Experience Improvement Program:

vCenter Connection

Citrix Virtual Apps and Desktops uses an Active Directory service account to log into VMware vCenter. This service account needs specific permissions in vCenter. To facilitate assigning these permissions, create a new vCenter role and assign it to the service account. The permissions should be applied at the vCenter datacenter or higher level.

Import vCenter Root Certificate

If the vCenter certificate is valid and trusted, then you can skip to the Hosting Resource section.

For newer versions of vCenter, you can import the root certificate that signed the vCenter Server/Appliance certificate.

  1. Point your browser to the root path of the vCenter Server URL.
  2. On the bottom right, click Download trusted root CA certificates.
  3. Extract the downloaded files.
  4. Go to \certs\win.
  5. Sort the files by date, and double-click the newest .crt file.
  6. On the General tab, click Install Certificate.
  7. In the Welcome to the Certificate Import Wizard page, change the Store Location selection to Local Machine, and click Next.
  8. In the Certificate Store page, click Browse.
  9. Select Trust Root Certification Authorities, and click OK.
  10. In the Completing the Certificate Import Wizard page, click Finish.
  11. If you close your browser and reopen it, and then go to the vCenter URL, there should no longer be any certificate errors.
  12. Skip to the Hosting Resource section.

Import vCenter Certificate

If the vCenter certificate is valid and trusted, then you can skip to the Hosting Resource section.

Alternatively, you can import the actual vCenter Server certificate (instead of the root). This is the only option for older self-signed vCenter certificates.

Newer versions of Citrix Virtual Apps and Desktops (CVAD) have the ability to import the vCenter certificate thumbprint into the database so every Delivery Controller trusts it. However, it is difficult to update the thumbprint whenever the vCenter certificate changes. It might instead be more reliable to use the older method of configuring the Trusted People store on the Delivery Controllers. Whenever the vCenter certificate is changed, you’ll need to repeat these steps.

  1. Get the vCenter certificate.
    1. Open a browser and point it to the vCenter URL. Note: this procedure to get the certificate won’t work in Internet Explorer.
    2. If Google Chrome, click the Secure box in the address bar, and then click Certificate.
    3. On the Details tab, click Copy to File.
    4. In the Welcome to the Certificate Export Wizard page, click Next.
    5. In the Export File Format page, either format will work. Click Next.
    6. In the File to Export page, browse to a new file, and click Next.
    7. In the Completing the Certificate Export Wizard page, click Finish.
  2. On the Delivery Controller, run certlm.msc. This opens the MMC console with the Certificates snap-in already added and pointing to Local computer.
  3. On the left, right-click the Trusted People node, expand All Tasks, and click Import.
  4. In the Welcome to the Certificate Import Wizard page, click Next.
  5. In the File to Import page, browse to the certificate you saved earlier, and click Next.
  6. In the Certificate Store page, click Next.
  7. In the Completing the Certificate Import Wizard page, click Finish.
  8. Click OK to acknowledge that the import was successful.
  9. Repeat these steps on the second Delivery Controller. It is important that you import the certificate on all Delivery Controllers before you add the Hosting Resource in Citrix Studio.
  10. If you open a browser and point o the vCenter Server, there should be no certificate errors.

Hosting Resources

Hosting Resources are used by both Machine Creation Services (MCS) and by Citrix Provisioning’s CVAD Setup Wizard.

A Hosting Resource = vCenter + Cluster (Resource Pool) + Storage + Network. When you create a machine catalog, you select a previously created Hosting Resource and the new virtual machines are created on the Cluster, Storage, and Network defined in the Hosting Resource object. If you need some VDA machines on a different Cluster+Storage+Network, then you’ll need to define more Hosting Resources in Studio.

Citrix CTX131239 Supported Hypervisors for Virtual Desktops (XenDesktop) and Provisioning (Provisioning Services). vSphere 7 is supported in CVAD 1912 CU2 and newer.

  1. In Citrix Studio, expand Configuration and click Hosting. Right-click Hosting, and click Add Connection and Resources.
  2. In the Connection page, for Connection type, select VMware vSphere.
  3. Notice there’s a Learn about user permissions blue link to an article that describes the necessary permissions.
  4. In the Connection address field, enter a vCenter URL similar to https://vcenter01.corp.local/sdk. The URL must contain the FQDN of the vCenter server.
  5. Enter credentials of a service account that can log into vCenter.
  6. In the Connection name field, give the connection a name. Typically, this matches the name of the vCenter server.
  7. If you are not using Machine Creation Services (MCS), and instead only need the vCenter connection for machine power management, change the Create virtual machines using selection to Other Tools.
  8. If you intend to use MCS, leave Create virtual machines using set to Studio Tools.
  9. Click Next.

  10. In the Storage Management page, click Browse and select a vSphere cluster.
    • Note: as detailed at CTX223662, make sure there’s no comma in the datacenter name.
  11. Select Use storage shared by hypervisors.
  12. Beware of Optimize temporary data on available local storage. From Mark Syms at XA 7.9 MCS with RAM Caching at Citrix Discussions: “If you use just MCS caching to local storage then the VM is not agile at all and cannot be moved even when powered off as it has a virtual disk permanently associated with a single host.”
  13. Click Next.
  14. In the Storage Selection page, OS and Personal vDisk must be selected on at least one datastore.
    • For maximum virtual machine placement flexibility, only select one datastore per Hosting Resource. To select additional datastores, run this wizard again to create a separate Hosting Resource for each datastore.
    • When creating a Machine Catalog, you select a Hosting Resource. If the Hosting Resource only has one datastore selected, then you know which datastore the new VMs will be placed on. However, if the Hosting Resource has multiple datastores, then the datastores are selected round robin, and you don’t have any control over which datastore is selected for each new machine.
    • Personal vDisk datastore still must be selected in version CVAD 1912 LTSR CU3 even though Personal vDisk has been replaced by User Personalization Layer.
  15. If you selected the temporary data on local storage option, on the bottom, click Select, and choose the datastores you want to use for disk caching. By default, all local datastores are selected. Click Next when done.
  16. In the Network page, enter a name for the Hosting Resource. Since each Hosting Resource is a combination of vCenter, Cluster, Network, and Datastores, include those names in this field (e.g. vCenter01-Cluster01-Network01-Datastore01).
  17. Select a network and click Next.
  18. In the Summary page, click Finish.
  19. If you need to rename Storage, Network, or Datacenters in vCenter, see Citrix CTX225019 XA/XD 7.13: Renaming Storage, Network or Datacenters When Used With MCS or PVS. Either run Update-HypHypervisorConnection -LiteralPath "XDHyp:\Connections\MyConnection", or right-click the Hosting Resource and click Edit Storage. You can cancel the wizard.

If you have multiple datastores for your VDAs, then create multiple Hosting Resources (one for each datatstore):

  1. Run the Add Connection and Resources wizard again.
  2. You can use the existing vCenter connection.
  3. This time, select a different datastore. Remember, don’t select more than one datastore per Hosting Resource.
  4. Give the Hosting Resource a name that indicates the chosen datastore.

When you later create a MCS Machine Catalog:

  1. Select the Hosting Resource for the datastore where you want the VDAs to be placed.
  2. You can create multiple Machine Catalogs, with each of them on different datastores. You can then combine the Catalogs into a single Delivery Group.
  3. Later in the MachineCatalog wizard, you’re given an option to enable MCS memory caching and select a cache size. This is similar to the Citrix Provisioning (PVS) option “Cache in RAM with overflow to disk”. Only enable MCS memory caching if your storage is not “all flash” and thus needs IOPS reduction. This MCS memory caching requires the MCSIO driver to be selected when installing Citrix Virtual Delivery Agent software on the VDA machines.

Citrix Licensing Server

Citrix Virtual Apps and Desktops 1912 Cumulative Update 3 comes with Citrix Licensing Server build 36000.

New Licensing Server

If you’re building a new standalone Citrix License Server:

  1. Extract the downloaded Citrix Licensing build 36000.
  2. Run CitrixLicensing.exe
  3. In the Software License Agreement page, check the box next to I have read, understand, and accept the terms, and click Next.
  4. In the Install Location page, click Next.
  5. In the Configure Ports page, click Next.
  6. In the Configure Customer Success Services Renewal page, click Install.
  7. In the Summary page, click Finish.

Upgrade Licensing Server

If you have a standalone Licensing Server, upgrade it to Citrix Licensing build 36000, if it isn’t already.

  1. Go to the downloaded Citrix Licensing build 36000, and run CitrixLicensing.exe.

  2. If you see the Subscription Advantage Renewal page, make a selection, and click Next.
  3. In the Upgrade page, click Upgrade.
  4. Click Finish.
  5. If you go to Programs and Features or Apps and Features, it should now show version build 36000.
  6. After upgrading Citrix Licensing Server, in Citrix Studio, go to Configuration > Licensing.
  7. On the right, click Authenticate Certificate.
  8. Change the selection to Connect me, and click Confirm.

Citrix Licensing Manager

Newer versions of License Server come with a new management web site. The older licensing console has been removed.

  1. From the Start Menu, run Citrix Licensing Manager. Or go to https://<My_Licensing_Server>:8083
  2. You might be prompted to login.

    • To eliminate this login, add the License Server URL to the Local Intranet zone.
  3. Licensing Manager might prompt you to register with Citrix Cloud.

    1. On the Settings > Usage and Statistics page, in the Share usage statistics with Citrix section, click Register.
    2. You’ll see a screen with a registration code. Click the Copy button and then click Register to be take to Citrix Cloud.
    3. After logging in to Citrix Cloud, on the top left, click the menu (hamburger) icon and then click License & Usage. If you don’t see this link, you might have to logout and log back in.
    4. In the License & Usage service, switch to the Registrations tab.
    5. Click the blue Register button in the middle of the page.
    6. Paste in the copied code and then click Continue.
    7. Click Register.
    8. Back in the on-premises Licensing Manager, it will eventually show as Registered.
    9. On the same Usage & Statistics page, scroll down, and then click Upload now. This should cause data to upload to Citrix Cloud and show up in Citrix Cloud License & Usage.
  4. Licensing Manager has a Dashboard page.

    • Click the arrow next to a license to see when it expires and the number of licenses in use.
  5. If you click the gear icon on the top right…
  6. On the Account tab, you can add License Server Administrators.
  7. The Update Licenses tab lets you check for license renewals and download them.

Activate Citrix License

The easy way to install and activate a Citrix license is through Citrix Studio:

  1. In Citrix Studio, expand Configuration, right-click Licensing, and click Allocate Licenses.
  2. Enter the LA- license code, and click Show.
    • You can find your LA- code at, click All Licensing Tools, and click View Licenses.
  3. Then click the Allocate licenses button.

    • Another method of allocating licenses is in the Citrix Licensing Manager at https://MyLicenseServer:8083 > Install Licenses tab.
  4. After licenses are installed, right-click the Licensing node, and click Edit Product Edition
  5. Change the edition to match your licenses. If you see both Virtual Apps and Virtual Desktops licenses, you must select Virtual Desktops. If you see both Concurrent and User/Device, then you must select User/Device. Click OK when done.
  6. Citrix Virtual Apps and Desktops supports mixed licensing in a single site/farm. See the following:

License Server CEIP

Citrix Licensing Server enables CEIP by default. In newer versions of Citrix License Server it’s not easy to completely disable it. You might have to block it on the outbound firewall.

  1. In the Citrix Licensing Manager (https://MyLicenseServer:8083), click the gear icon on the top right.
  2. Switch to the Usage and Statistics tab and make selections in the Share usage statistics with Citrix section.

Citrix License Management Service

Citrix Licensing Server includes the Citrix License Management Service. This service assists with license management and support:

  • Allocating new licenses if you are about to exceed your license capacity
  • Rescinding old licenses after an upgrade
  • Managing duplicate licenses in a Disaster Recovery (DR) environment

Citrix Licensing Server Monitoring

Citrix Licensing Server has historical usage reporting:

  1. Run Citrix Licensing Manager from the Start Menu. Or use a browser to connect to https://MyLicenseServer:8083
  2. On the Historical Use tab, use the drop-down menus to select a license type, select dates, and export to a .csv file.
  3. At the bottom of this page is a link to change the retention period.

Jonathan Medd Monitor Citrix License Usage With PowerShell.

Lal Mohan – Citrix License Usage Monitoring Using Powershell

Jaroslaw Sobel – Monitoring Citrix Licenses usage – Graphs using WMI, Powershell and RRDtool. This script generates a graph similar to the following:

Remote Desktop Licensing Server

Install Remote Desktop Licensing Server

Do the following on your Delivery Controllers:

  1. In Server Manager, open the Manage menu, and click Add Roles and Features.
  2. In the Installation Type page, select Role-based or feature-based installation.
  3. Click Next until you get to the Server Roles page. Check the box next to Remote Desktop Services, and click Next.
  4. Click Next until you get to the Role Services page. Check the box next to Remote Desktop Licensing, and click Next.
  5. Click Add Features if prompted.
  6. Then finish the wizard to install the role service.

Activate Remote Desktop Licensing

  1. After RD Licensing is installed, in Server Manager, open the Tool menu, expand Terminal Services (or Remote Desktop Services), and click Remote Desktop Licensing Manager.
  2. The tool should find the local server. If it does not, right-click All servers, click Connect, and type in the name of the local server.
  3. Once the local server can be seen in the list, right-click the server and click Activate Server.
  4. In the Welcome to the Activate Server Wizard page, click Next.
  5. In the Connection Method page, click Next.
  6. In the Company Information page, enter the required information, and click Next.
  7. All of the fields on the Company Information page are optional, so you do not have to enter anything. Click Next.
  8. In the Completing the Activate Server Wizard page, uncheck the box next to Start Install Licenses Wizard now, and click Finish. Since the session hosts will be configured to pull Per User licenses, there is no need to install licenses on the RD Licensing Server.
  9. In RD Licensing Manager, right-click the server, and click Review Configuration.
  10. Ensure you have green check marks. If the person installing Remote Desktop Licensing does not have permissions to add the server to the Terminal Server License Servers group in Active Directory, ask a domain admin to do it manually. If you have the proper permissions, click Add to Group.
  11. Click Continue when prompted that you must have Domain Admins privileges.
  12. Click OK when prompted that the computer account has been added.
  13. Click OK to close the window.

Citrix Scout

Delivery Controller includes Citrix Scout that can be launched from the Start Menu.

The tool can run a manual collection, run a trace, schedule periodic collection, or run a Health Check.

Health Check:

  1. When you select machines, it might tell you to enable PSRemoting.
  2. Winrm is usually not enabled on desktop machines. Login to the machine, open command prompt as administrator, and run winrm quickconfig. It’s also possible to use Group Policy to enable winrm.
  3. Scout 1909 and newer lets you add a StoreFront machine.
  4. Go back to Citrix Scout and click Continue.
  5. Click Start Checking.
  6. You can click View Details to view the issues it found.


  1. The wizard is identical to the Health Check wizard, except there’s another screen to upload the data.

  2. If Citrix Cloud credentials, then you need to Generate a token.
  3. After logging into Citrix Cloud, copy the token.
  4. Go back to Citrix Scout and paste the token. Click Continue.
  5. Click Start Upload.
  6. Click View Analysis.

Links with more information:

Citrix Virtual Apps and Desktops Health Check

Sacha Tomet Finally 1.0 – but never finalized!: XenApp & XenDesktop 7.x Health Check script has now Version 1.0.

Pavan900 posted a PowerShell-based Health Check script at Citrix Studi – Colors for Maintenance Mode at Citrix Discussions.

Andrew Morgan – New Free Tool: Citrix Director Notification Service: The Citrix Director Notification service sits on an edge server as a service (or local to the delivery controller) and periodically checks the health of:

  • Citrix Licensing.
  • Database Connections.
  • Broker Service.
  • Core Services.
  • Hypervisor Connections.

And if any of these items fall out of bounds, an SMTP alert is sent to the mailbox of your choice for action. The tool will also send “All Clear” emails when these items are resolved, ensuring you are aware when the service has resumed a healthy state.

Matt Bodholdt XenDesktop 7.x Controller Service Status Script at CUGC – PowerShell script that checks the following:

  • Lists Controllers with boot time
  • Licensing status
  • Service status on each Controller
  • DB Connections
  • Controller Available Memory
  • Hypervisor Connections Status

Related Pages

59 thoughts on “Delivery Controller 1912 LTSR CU3 and Licensing”

  1. Hi Carl we have just upgraded our farm from 1909 to 1912 CU3. In director all is perfect but we can’t see the licences in studio anymore. (Unexcepted error). This part needs winrm between DDC and licence server? (Winrm is blocked).

  2. Hello Carl

    I have question
    the Citrix related services in services.msc, how should be configured automatic or automatic (delayed start) & “Log On” option should be “Local Service” & “Network Service” ?

    1. I would not change any of those from the defaults. If you don’t know what the defaults are, then build a new server and compare.

  3. In case this helps someone: If you have Citrix Virtual Apps *Standard* Edition, you may receive a Configuration Logging warning during Delivery Controller upgrade or when running a Scout Health Check. It says something to this effect:

    No logging database connection

    There is no connection to the Configuration Logging database. The Configuration Logging state is currently “Disabled.” This issue affects all Delivery Controllers in the Site.

    When running a Get-LogSite, it returns the State as “NotSupported”, and will give an error if you try to enable it. I found the answer here, hopefully it will save someone else the research time:

  4. Where can logs be gather for STA’s? CTXSTA.config location in 1912? Does it need IIS to show in the program files\system32 directory?

      1. Thank you for your response Carl. I think you are right. I know there a lot of info out there of gathering logs for sta by changing the ctxsta.config file under program files\citrix\system32 but I seems that it is for citrix 6.5. i haven’t been able to find anything concrete information or guidance for the newer versions of citrix.

  5. Hi Carl,

    I have been to the menu to disable License Server CEIP.
    but, Citrix removed the Option “Do not send any Data to Citrix”.
    Do you have any other way?

    1. Citrix seems to be making it more difficult to stop CEIP. One option is to block it on the firewall.

    2. Carl,

      I have an issue with the license server.
      I have a ddc installed with 1912

      Started with a trial version, but have the license server with enough licenses but the server still gives the error that the license period was experied.

      Can’t remove the trial version..

      Thanks in advanced.

      1. In Citrix Studio, go to Configuration > Licensing. On the right, click Set Product Edition. Select the edition that matches your license files.

  6. Hi,

    1. AD : 2 ea
    2. DDC : 1 ea
    3. SQL : Installed on DDC server. Installed SQL express which included in Xendesktop 7.15 package.
    3. Administrator Account : testsite\administrator

    [Will Do]
    1. Upgrade Xendesktop 7.15 -> CVAD 1912 CU2
    2. Change password of “testsite\administrator” account.

    1. Changing Administrator’s passoword will effect to Director service.
    -> After change password, should I do change other setting?

    1. CVAD, including Director, does not use any service accounts other than the service account that is used to log into the hypervisor. CVAD uses the computer account of the Delivery Controller to log into SQL.

  7. Hi,

    After upgrade xendesktop to CVAD 1912 CU2, I’d like to change active directory administrator’s password.
    Should I do change configuration on citrix service?
    We’re just using SQL express which is included in CVAD 1912 install file on DDC machine.

  8. hello, wat are the requirments for a license server to see a user as 1 license ?

    exsample, when opening a P desktop and start a pub app on a silo, 1 license is being used.

    but i am in a merger of domains…

    2 citrix farms
    2 domains ( full trust)

    users from farm A can start Published desktop and from there start app from farm B ( same user sson) but then 2 licenses are being used. 1 from both farms.

    If i will let farm A look at the license server from farm B, what happens ? wil it be seen as 1 license or still 2 ?

  9. hi carl, i’ve upgraded storefront, fas server from 7.15 to 1912 LTSR CU2. I have delivery controller remaining, do we have to upgrade license server to latest, we are already on build 29000.

  10. Hi,

    with the new Version of License Server (, Citrix remove the Option “Do not send any Data to Citrix”. Is only Possible to reduce the Information but not complete Disable. Any one now how to disable CEIP may be via Registry Key?

  11. Hello Carl, are there any reasons why Storefront and Delivery controller should be on a separate server, apart from being best practice?

    Secondly, trying to do a Citrix migration from 7.15 to 1912 LTSR, would a side-by-side be recommended, if so how to approach this? We also use DB Mirroring as well and like to change to AlwaysOn configuration too.

    1. StoreFront can be difficult to upgrade so it’s safer to put it on a separate server.

      I usually do in-place upgrades but you’re welcome to do parallel migrations. It’s not difficult to reconfigure or move databases and then change the connection strings on the Connection Servers.

      1. Thanks, i’m quite confused with the vda command installation. Is Framehawk automatically uninstalled if you upgrade an existing VDA – for e.g. RemotePC or Full Clone Persistent Desktop?

        If you use commands /virtualmachine it says; “Valid only when installing a VDA on a VM. Overrides detection by the installer of a physical machine, where BIOS information passed to VMs makes them appear as physical machines”. What does this mean? Is this option only for Persistent Full Clone Desktops?

        If you use /enable_hdx_udp_ports – does this enable HDX Transport on an individual desktop basis. I noticed the Desktop going to UDP even though we have HDX Transport rule disabled now in Policy. I’m not sure why?

  12. Hi Carl;

    Sorry if this isn’t the correct page to post this..

    We don’t have a delivery controller on-prem.. since upgrading to PVS 1912 LTSR, some powershell cmdlets such as Get-BrokerMachine no longer work (failed to connect to back-end server “localhost” on port 80). Since our delivery controller is in the cloud, I’m not sure what to specify for -AdminAddress (specifying my local cloud connectors didn’t work for that).

    What do you suggest?

    This is part of a VDA reboot script we’ve been using.


    1. Did you download the PowerShell SDK from Citrix Cloud and install it on a machine that doesn’t have any other Citrix PowerShell snap-ins?

      1. Hi Carl, I think I’m following you… we had the script running on the PVS server itself.. I see that PVS 1912 LTSR has added a bunch of new Powershell Snap-Ins that we didn’t have on 7.15 LTSR. Would those have created a conflict with the Cloud Remote Powershell SDK?

        I installed the Remote Powershell SDK to a different machine and yes it sure works… thank you! I’ll move the script to run from another machine moving forward.


  13. Hello Carl,
    Is there any particular reason you setup RDS Licensing on the Controller? I have a larger environment so my core services servers are all separate. What about putting RDS Licensing on the Citrix License server?

    Also, it says “Controllers.” So if you have two delivery controllers do you put RDS Licensing on both or just one? If its both, i assume for redundancy but how does that effect RDS licensing?

    1. RDS Licensing needs to go somewhere. It’s just a small service that building separate servers for just it doesn’t make sense.

      If RDS Licensing is “Per User”, then you can easily build multiple RDS Licensing Servers and configure RDSH to use both.

      What happens if RDS Licensing is down? Try both new users and existing users.

      1. Thank you. That makes sense. So do you install full cal count on each rds server or half/half or all on one and none on the other since if there is failure the second or backup one would hand out temporary calls anyways?

  14. LogonToleranceIsHardLimit – is this still recommended on adding to controllers? We sometimes have servers that have way more than the allowed concurrent sessions. Could this partly be the issue?

  15. Hi Carl,
    I have a strange ISSUE with SQL.
    I have Deployed multiple machine catalog (AppLayering and not), all works great, but with all the VDI of a specific Machine Catalog in SQL logs i find a lot of this messages:

    Login failed for user ‘DOMAIN\$’. Reason: Could not find a login matching the name provided. [CLIENT: ]

    User are using VDI without problem.
    Not particular error showed by Director Console

    Do you have any suggestion?

  16. It can help you, some steps found on reddit :

    Set-logsite -state “disabled” was the trick for my coworkers.

    Upgrade steps: – take snapshots – backup the databases – put all servers into maintenance mode – boot active sessions – upgrade the licensing servers – upgrade storefront (our licensing and storefront servers are separate from our delivery controllers) – upgrade VDAs – set logging db to disabled (I did it at the command line using these commands) To disable configuration logging: Right-click the PowerShell icon and click Run as Administrator. Load the Citrix PowerShell extensions by typing asnp Citrix*. Run the command Set-LogSite -State “Disabled”. upgrade delivery controller and all of its components (including director and studio) open up studio and upgrade the site using automatic method (this is where we got stuck before) if successful, upgrade all other delivery controllers and their components enable logging database (studio will prompt you to do it) run site tests upgrade machine catalogs and delivery groups upgrade published desktops take one server out of maintenance mode and test published apps take all other servers out of maintenance mode CONGRATS! You’ve just upgraded Citrix to 1912!

  17. Hello Carl,

    I would like to upgrade our citrix passage from 7.15cu4 to 1912 LTSR CU1.
    First is to update the license server (since ISO 1912ltrs) as it is the first time that I upgrade.

    Is the installation program that will update the license server by itself?
    I do not need to ask for a new license key since it is on the same server?

    1. IF License Server is installed on the Delivery Controller, then upgrading Controller will also upgrade the License Server.

      As for the license file, just make sure the Subscription Advantage data is not expired.

      1. Hello Carl,

        no I have a VM for DC and a VM for the license server

        I don’t understand this “Regarding the license file, just make sure the Subscription Advantage data is not expired.” ? Why? can’t i update?

        1. If License Server is separate machine, then upgrade it first.

          In Citrix Studio > Configuration > Licensing, on the bottom half it shows your licenses. Make the Subscription Advantage data is not expired. If it is expired, then you need to re-download your license files and install them.

          1. Do I still have to subscribe to citrix on because I have reached the end of my support

          2. Looks good to me. I’m guessing you’re renewing it every year. Just make sure the license on your license server has the same date. If not, then download the license file from and install it on your license server.

  18. Hello Carl, in 1912 LTSR CU1 the Storefront Upgrade is not included in upgrading the Core Components – should I upgrade Storefront first or after Core Components to CU1 from 7.15 LTSR?


    1. Order doesn’t matter. But I usually upgrade StoreFront during same maintenance window that I upgrade the Controllers.

  19. Hi Carl
    Hope you’re dong good !
    I have a question about Citrix licensing because i can’t find any answer on the web.

    My compagny bought 250 CVAD premium Concurrent licences.
    I imported them on my license server but now I have 2 lines on Citrix license Adminstration Console, one for CVAD premium Concurrent and another for CVA premium Concurrent withe the same SA date

    – Does it mean that when I bought one CVAD licence, I have one CVA offered at the same time ?
    – Can I deliver 250 CVAD licenses and at the same time 250 CVA licenses to 250 other people ?

    When employees connect to my published XA 6.5 desktop, I see CVA licenses decreased but the number of CVAD doesn’t change.
    When employees connect to my 7.15 LTSR VDI, I see CVAD licenses decreased but the number of CVA doesn’t change…

    Take care !

    1. The CVA (no D) licenses are for legacy farms that don’t understand CVAD license. XenApp 6.5 doesn’t understand CVAD licenses.

      You should not exceed the 250 you purchased. If a single user connects to both farms, then it’s only one license. But if you have different users connecting to each farm, then make sure it doesn’t exceed 250.

  20. Hi Carl,

    I was reading through the section of creating hosting resources. BTW, I set my environment up over 2 years ago and have been running without issue.

    I’m curious about one item that you mention. You said not to use the different NFS storage for each hosting resource.

    Can you explain in more detail on the issues you might run into using the same storage? Is it more for organizational reasons or is there a technical reason for doing so?

    For instance, if I have an NFS volume of VDI and PVD and used those across all hosting resource, what issues could I see?

    Thanks in advance 🙂

    1. Are you referring to my recommendation to create separate Hosting Resources for each datastore?

      I’m not aware of any problems with creating multiple Hosting Resources with the same storage.

      1. So this line here confused me a bit. I read back to just before that and it makes sense as to why you were doing that now:

        3. This time, select a different datastore. Remember, don’t select more than one datastore per Hosting Resource.

        I have separate NFS Volumes, one for the VDI disks and one for the PVD’s and have them added separately in each hosting resource. They are the same volumes on all of the hosting resources.

        Albeit, I think I’m comparing apples to oranges here, I’m on Hypervisor, while you’re using vSphere. I’m good, I just wanted to make sure I wasn’t missing some sort of best practice. 🙂

  21. Hi Carl,

    I am facing issue when I am joining my third DR DDC in existing site and getting below error.

    There was an error communicating with Delivery Controller. Check that the Delivery Controller is ON and its DNS records are correct and firewalls are configured to allow communication. Note, the Citrix Configuration Service runs on the Delivery Controller.

    I have checked configuration services and delegation service on all DDCs and found all are running and able to telnet on port 80 to the target DDC and checked DNS is working.

    I need your help to fix this issue.

    Thank you in Advanced!

  22. Hi Carl, in the upgrade section for DDCs of your comprehensive guide, I can’t find a mention to the DisableServices.ps1 and EnableServices.ps1 scripts you have to use when you opt for a manual upgrade. You are usually 8 or 10 shots ahead compared to us, therefore this missing part stroke me strongly. I did an 7.15 CU1 -> 1912 LTSR upgrade today, and given my account has not the necessary permissions to update the db schema, I choosed the manual option and with this one, you definitely have to run apply the sequence : db backup, ddc snapshot, upgrade, disableservices.ps1, exec sql scripts logging, monitor, site, enableservices.ps1.

Leave a Reply