How I Upgraded My Site From 7.15 Flat All the Way to 1912

by Ray Davis

This is a guide on how I upgraded my site from 7.15 flat all the way to 1912. I also included moving off 2012R2 to 2016 DDCs with some troubleshooting situations you might run into. I covered the basics of upgrading Licensing, DDC upgrades, Storefront upgrades with NS VIP configuration, PVS upgrades, WEM upgrades, VDA upgrades, and some re-configuration of Snap-ins with Director for ADM and session recording.

  1. References for detailed instructions
  • Upgrade the licensing Server
  • Go download the version you need. In this case, its Build 29000

Run the CTX_licensing installer

Check the box to agree

  • After upgrading Citrix Licensing Server, in Citrix Studio, go to Configuration and Licensing.
  • On the right, click Authenticate Certificate.

Open Citrix licensing Manager

  • I was prompted to register my licensing server with Citrix Cloud.
  • Licensing Manager might prompt you to register with Citrix Cloud.

On the Settings > Usage and Statistics page, in the Share usage statistics with Citrix section, click Register.

You’ll see a screen with a registration code. Click the Copy button and then click Register to be taken to Citrix Cloud.

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.

In the License & Usage service, switch to the Registrations tab.

Click the blue Register button in the middle of the page to register.

Paste in the copied code and then click Continue. Click Register.

  • On-premises Licensing Manager, it will eventually show as Registered.
  • 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.
  • reporting
  • *Note* For me, I always check and make sure it shows activated within Studio and is set to the right product edition
  • Upgrade VDA to 1912
  • I also upgrade my VDAs ahead of time. It’s easy and something I just do.
  • Depending on your provision side. PVS, MCS or old fashion servers( which is still used)
  • Mount ISO and upgrade
  • Upgrade Delivery Controllers 7.15.5000
  • Snapshot your Delivery controller
  • Backup your SQL databases
  •  Attach the 7.15 CU5 media
  • Run the Studio and Server Components for the upgrade

Read and Accept

Read and make sure you take the correct actions you need in your environment.

Start your Preliminary Test and make sure you are good!

Firewall Ports


Upgraded process started.

Connect to Call home if you need to.

13 Launch Studio

  • **NOTE**
  • “If you already have 2 controllers then In Load Balancing, reactivate the servers with the new Delivery Controller version and set the second half of the servers to Down. Follow the top steps on the second half of the Delivery Controller Server Activate each server with the new Delivery Controller Server version in Load Balancing again.”
  • 14. For me I am adding a 2016 server to move off 2012R2. I will add the Second 2016 server in, then make sure the 2016 is handling the connections. Then Decom 2012R2 and add a new second (replacement of 2012R2 as 2016 server.
  • 15. Attach the 7.15.5000 ISO, click on XenDesktop or XenApp (depends on your deployment)
  • 16. XenDesktop allows for both XenApp and XenDesktop. XenApp is only XenApp.

Select Delivery Controller

Read and Understand, accept.

We only want, Delivery Controller, Studio and Director.

I don’t want SQL express in the step, Uncheck it.

Review and make sure firewall is configured based on your environment.


This will take about 5-7 minutes.

Select call home options.

Finish, reboot and then launch Studio.

After Studio is opened, select “Connect this Delivery controller to an existing site”

Add the primary DDC.

It will ask to update the DB automatically, I select yes and will put in my SQL creds.

Studio will open and show the Site.

Run a Site check to make sure it’s good.

This will take 10 minutes.

Looks good.

  1. At this point I have the following:
  1. 2012R2 715.5000 Deliver Controller
  2. 2016 7.15.5000 Delivery Controller.
  3. Bother are upgraded from 7.15 to 7.15.500
  • Now we will begin the 7.15.500 upgrade to 1912 LTSR.
  • Snapshot your Delivery controller
  • Backup your SQL databases
  •  Attach the 1912 media
  • Run the Studio and Server Components for the upgrade

Read and accept.

Make sure the following has been completed to ensure a upgrade will go smooth.

Licensing Error I received when I clicked next. Even though I upgraded my licensing version to build 29000,I had to update my licensing files past November 2019. I logged into my Citrix Licensing manager. Https://yourCTXlicServer.FQDN:8083, then selected check for available renewals. Follow the prompts to get an updated timestamp.



This is not production; my specs are lower than what it wants. However, I will meet the minimum to ensure the upgrade is solid.

Let’s pick back up where I left off. Preliminary Site Test (Run this to ensure no errors exist).

Test in progress.

Two tests will not run, as they don’t apply.

Results go through and test all the orchestrations of the environment.

Firewall ports.

Summary, then click upgrade.

Upgrade progress.

Upgraded, but Reboot needed.

After Reboot it will resume. Now on Post Install….

Connect to Citrix Cloud for Diagnostics data if needed in your environment.

Finished and now open Studio.

Now upgrade the Database through Studio (my service account has permissions).

It will ask you again, about backing up the DB.

Add the Creds, unless you are logged into the server as the account (Account needs proper permissions, in Citrix, and on the servers).

It’s now started.

Going, 9 successful… GOOOD so far.

Still going well.


You now need to do the second Delivery controller we added early in the process. It’s the 2016 server.

Remote to the Server, Attach the Media, and I double click on the mounted ISO from my hypervisor.

Click Upgrade on Studio and Server components.

Read and Agree.

Ensure the following is completed, although it’s a second DDC.

Firewall for DDC and Director.


Warning pop up about not being able to stop it once it starts.

Upgrading has started ( The Time says 13 minutes) Sometimes it’s accurate, or not accurate.

Machine needs to be rebooted to apply some .Net settings/updates.

Rebooted, and now it’s still applying them.

Log back in, and it will resume back to the place it was at. Be patient!

Connect to Citrix Cloud for Diagnostics data if needed in your environment.

Now launch Studio.

Start the automatic site upgrade.

Since this has already run, it shouldn’t take long.

Studio is now launched.

Let’s do a site test on the Delivery controller.

Things passed, and look good.

  • Let’s do a Machine Catalog and Delivery group test. (Failed)?!! Looks like my Delivery controllers don’t have the updated vcenter cert. Let me fix this. I simulated a failure to show the value of running the tests.
  • I fixed my cert by following this:

Now once both had updated 1912 Software, go into the first Delivery Controller and finish the “upgrade remaining delivery Controllers”

  • Once all the Delivery Controllers and VDAs are upgraded, within Citrix Studio, view your Catalog for the current functional level (Set to VDA version you have in the catalogs). Citrix Virtual Apps and Desktops (CVAD) 1912 lets you upgrade your Catalogs and Delivery Groups to functional level 1811 if needed.
  • **WARNING****Don’t upgrade the Catalog or Delivery Group until all VDAs with the Catalog and Delivery Group are VDA version 1811 or newer.

Then upgrade the Delivery Groups by right-clicking on a Delivery Group and clicking Upgrade Delivery Group.

  • This concludes the upgrade for the Delivery controller.
  • Now let’s Decom one Delivery controller, that is 2012R2.
  • *Note*
  • Active connections should not be dropped if you remove a delivery controller from the site. Remove the controllers from Storefront first, then from studio. Any VDAs registered to the controller should re-register with the remaining controllers, however this may take a few minutes, so a resource that hasn’t registered yet might be unavailable for a relatively short time.
  • You could also stop the Broker service on the redundant controllers which would also cause any registered VDAs to de-register.
  • Whilst doing this during business hours should be OK, there’s always a risk that for some reason a VDA doesn’t register with the remaining controllers, so unless you can’t avoid it, doing it out of hours, or during low use phases is always preferable.
  • Remove the controllers from Storefront first.
  • Then from Studio:
  • Make sure the Controller is powered on so that Studio loads in less than one hour. Once Studio loads the Controller you want to remove, power off the Controller when prompted to do so.
  • Select Configuration > Controllers in the Studio navigation pane and then select the Controller you want to remove.

Select Remove Controller in the Actions pane. If you do not have the correct database roles and permissions, you are offered the option of generating a script that allows your database administrator to remove the Controller for you.

This error is out. So, I did it and selected no, here.

Then it asked to generate a DB script, for the Database guys.

  • Run “Get-BrokerController”

Then run this POSH Script:

  • It will put a Evict.txt file in either your profile %userprofile% or C:\windows\system32. Give this file to your DBA.
  • Then Run it on the database.

Check Studio and it’s gone.

  • Any VDAs registered to the controller should re-register with the remaining controllers
  • Adding a second 2016 Delivery controller now to slit the broker balancing out
  • Install Virtual apps and Desktops

Select Delivery Controller.

Read and accept.

Select the components you need.

Install the Feature you need (NO Local SQL for me).

Firewall ports.


Extracting Files.

Machine needs to reboot.

Collect diagnostic information.

Finished, now launch Studio.

Connect the delivery controller to an existing site.

Add the delivery controller address that is already a part of the site.

For this part, in my environment I selected yes.

Enter my creds to add to the database, then let the process begin.

I now have 2 controllers that are 2016.

Both servers are.

  • Finalize Citrix Director
  • Finalize Director upgrade run this.c
  • C:\inetpub\wwwroot\Director\tools\Directorconfig.exe /upgrade
  • If you use Citrix ADM, and Citrix Session Recorder you will need to register the Snap In back after all the upgrades. This is so you can control the feature in Director
  • Register Director ADM MAS back
  • If using HTTPS to connect to Insight Center then the Insight Center certificate must be valid and trusted by both the 22.
  • Director Server and the Director user’s browser.
  • To link Citrix Director with NetScaler HDX Insight, on the Director server run C:\inetpub\wwwroot\Director\tools\DirectorConfig.exe /confignetscaler.
  • Enter Machine name or IP: Netscaler Insights machine or IP
  • Enter 1 for Citrix ADM (aka MAS).
  • Rest is self-explanatory.
  • Register Director Snapin back for Session recording
  • Run C:\inetpub\wwwroot\Director\tools\DirectorConfig.exe /configsessionrecording
  • Enter the Session Recording FQDN (server.FQDN)
  • Enter 1 for HTTPS.
  • Enter 443 as the port

Upgrading or replacing the SQL LocalDB for Local Host Cache for 1912 or 1912 CU1

There has been some recent change to the LTSR article around Local Host Cache upgrades

  • When upgrading Delivery Controllers to Citrix Virtual Apps and Desktops version 1912 or 2003: Upgrading SQL Server Express LocalDB is optional. Local Host Cache works properly, with no loss of functionality, regardless of whether you upgrade SQL Server Express LocalDB. We added the option to move to a newer version of SQL Server Express LocalDB in case there are concerns about the end of support from Microsoft for SQL Server Express LocalDB 2014.
  • When upgrading Delivery Controllers to Citrix Virtual Apps and Desktops versions newer than 2003: The minimum supported version is SQL Server Express 2017 LocalDB Cumulative Update (CU) 16. If you originally installed a Delivery Controller earlier than version 1912, and have not replaced SQL Server Express LocalDB with a newer version since then, you must replace that database software now. Otherwise, Local Host Cache will not work.

As you can see here, at one time it stated you needed to upgrade, or it would not work. However, it doesn’t seem that it is 100% anymore. I think that’s why Citrix updated the doc. 

As can be seen here some had the same concerns or questions around it. I most certainly did.

  • So, let’s get started. I always do a snapshot first. Which is completed. 
  • Complete the upgrade of your Citrix Virtual Apps and Desktops components, databases, and site. (Those database upgrades affect the site, monitoring, and configuration logging databases. They do not affect the Local Host Cache database that uses SQL Server Express LocalDB.)
  • As you can see, I am on 1912 CU1 and have MSQL Express 2014.

On the Delivery Controller, download PsExec from Microsoft. See the Microsoft document PsExec v2.2.

  • Open CMD as Admin and open PsExec.exe


  • Move to the folder containing SqlLocalDB.

cd “C:\Program Files\Microsoft SQL Server\120\Tools\Binn”

  • Stop and delete CitrixHA (LocalDB).
  • If you don’t stop is you will get this error (Me not paying attention).

SqlLocalDB stop Citrix

SqlLocalDB delete Citrix

Remove the related files in C:\Windows\ServiceProfiles\NetworkService

Uninstall SQL Server Express LocalDB 2014 from the server, using the Windows feature for removing programs.

Install SQL Server Express LocalDB 2017. In the Support > SQLLocalDB folder on the Citrix Virtual Apps and Desktops installation media, double-click sqllocaldb.msi

Reboot the server and make sure this is started “Citrix High Availability Service”.

Logged on and it took about 15 seconds to show up.

Then 60 seconds or so on this:

Check if the Citrix Db is created.

CitrixHA is re-created the next time a configuration sync occurs. After a minute or two, use the SqlLocalDB utility to confirm that CitrixHA has been re-created.

SqlLocalDB i



Example: While still in the PsExec session run this:

C:\Program Files\Microsoft SQL Server\120\Tools\Binn>SqlLocalDB i



You will see this until you do the second broker.

After I did my second Broker this was in the logs:

But then I see this almost every 2 minutes. I remember reading about this. But I thought it was fixed many versions ago.

Did some Google on the Errors and came up with the 2 links below.

  1. LHC DB upgrade reference

  • Turns out some AD accounts were deleted over time, and it had some bad SIDs.
  • So, I ran the quick script to get the output.

Get-BrokerApplication |foreach {if ($_.AssociatedUserNames -match “S-1-5-21”) {$_.Name; $_.AssociatedUserNames -match “S-1-5-21”; “”}}

  • Went into Studio and deleted them from the location it displayed above. Which was in a Published application visibility.
  • Then CTX230775 was needed to redo the LHC DB. So quickly ran through the process and it fixed the error. 

So, in summary, this is how I upgraded the LHC DB and some minor troubleshooting. Hope it helps someone

  • Citrix StoreFront 7.15 to 1912 (Example I did on one SF server on the upgrade. But you would want 2 servers)
  • If you have a Load balancer, disable it in your load balancer. This way traffic doesn’t route to it. (Assuming you have 2 or more storefront servers)
  • In my case I have a LB Vserver and IP is X.X.X.X  and back end servers are A.A.A.A  and B.B.B.B
  • Server A.A.A.A is disabled
  • Browse the ISO

Accept the terms.

Ready to install.


Upgrade has finished.

I am adding a new StoreFront Server, so this will be a new install and add to the Storefront store. I just browse to the StoreFront application and run it.

License agreement.

Review prerequisites.

Ready to install.

Installing Software.

Successfully installed StoreFront.

Join existing server group.

On the Primary StoreFront Server click “Add Server” here to get an Authorization Code.

Take this information and input it on the secondary StoreFront Server.

Input information on Second server.


  • Sever joined
  • Now Add IIS Cert and Bind it to 443 in IIS
  • Add Server in netscaler>Traffic Management>Load Balancing>Servers
  • Add Server

Add service.

Add monitor.

Now go bind it, once you bind it to the Service you will notice its down. Which is normal, from what I have gathered.

  • The StoreFront monitor by default is only via HTTP.I created earlier is trying to probe the backend services of our server through HTTPS.
  • To fix this do this:
    • Run PowerShell as an administrator.
    • PS C:\Program Files\Citrix\Receiver StoreFront\Scripts> .\ImportModules.ps1

PS C:\Program Files\Citrix\Receiver StoreFront\Scripts> Get-DSServiceMonitorFeature http://localhost:8000/StorefrontMonitor

Now run the command Set-DSServiceMonitorFeature -ServiceURL https://localhost:443/StoreFrontMonitor.

All steps outlined in Red:

Now you will see the monitor come alive on the Service.

  • Now bind it to the main Vserver
  • Provisioning Server 1808 to 1912
  1. Please check if the previous version needs to be uninstalled first. Some versions, Citrix wanted you to uninstall the older version first. But most of the time you don’t. 
  2. Example here:
  3. We are updating 1808 to 1912 so an in place upgrade is good.
  4. Before I start I make sure I use a service account that is tied to the database so it can upgrade the database.
  5. I put the account in the local admin of the PVS servers and use it to do the upgrades
  • After the uninstall has completed, restart the server. When it comes back up, log back in with the service account.
  • Attach the ISO.  Run Server installation.

Click “Install”, the process will begin and then the window will disappear for a couple of minutes while it installs some of the pre-requisites.

When the window pops back up Click “Next.” 

Accept the License Agreement and click “Next.”

Enter “Something” in the User Name and Organization Fields, then click “Next.”

Click “Next.”

Click “Install.”


Click “Finish.”

The Configuration wizard will start.

For this screenshot I have 2 PVS servers, depending on your Farm you could have 1 or more. The PVS servers IP address will show here. If you have 1 server then  1 Ip will show. If you have 2 then 2 will show.

Backup your database before starting.

  • PVS console upgrade
  • Log into the server with the service account.
  • In C:\SRC\1906 open the “Console” Folder. 
  • Right click on “PVS_Console_x64.exe” and run as administrator. 
  • Once the .exe has launched Click next through the installation.
  1. If you run into any issues during the installation of the pre-requisites refer to 
  3. Accept licensing terms

Fill in the names.

Install in the default directory.




Open the console and check the version.

You need to re-register those PowerShell snap-ins. Reregistering Citrix.PVS.Snapin.dll is well-known, but here are 5 other snap-ins that are necessary as well.

  • On the PVS server, run CMD as Administrator. Then in each of these folders:
  • CD \Windows\Microsoft.NET\Framework64\v4.0.30319
  • CD \Windows\Microsoft.NET\Framework\v4.0.30319
  • Run all of these commands:
    • .\InstallUtil.exe “C:\Program Files\Citrix\Provisioning Services Console\Citrix.PVS.Snapin.dll”
    • .\InstallUtil.exe “C:\Program Files\Citrix\Broker\Snapin\v2\BrokerSnapin.dll”
    • .\InstallUtil.exe “C:\Program Files\Citrix\Configuration\SnapIn\Citrix.Configuration.Admin.V2\Citrix.Configuration.PowerShellSnapIn.dll”
    • .\InstallUtil.exe “C:\Program Files\Citrix\ConfigurationLogging\SnapIn\Citrix.ConfigurationLogging.Admin.V1\Citrix.ConfigurationLogging.PowerShellSnapIn.dll”
    • .\InstallUtil.exe “C:\Program Files\Citrix\DelegatedAdmin\SnapIn\Citrix.DelegatedAdmin.Admin.V1\\Citrix.DelegatedAdmin.PowerShellSnapIn.dll”
    • .\InstallUtil.exe “C:\Program Files\Citrix\Host\SnapIn\Citrix.Host.Admin.V2\\Citrix.Host.PowerShellSnapIn.dll”

PVS Targets upgrades:

  1. You will need to go to the PVS server that you are working on and open the PVS console.
  2. Then go to vDisk Pools and create new versions. If you have 5 versions, then the 6th version will need to be merged with the last base and updates or updates only and needs to be Maintenance mode. It will take some time to create the merge base.
  3. Now go into your Hypervisor and power on the Master VM up that has the new version.
  4. Open the console so you can see the VM.
  5. It will ask you to press 1 for the new Maintenance version. Press 1, and it will boot into windows.
  6. Now bring over the PVS software, and put it on the C or D drive of the Target

Click Next at Welcome to the Installation Wizard for Citrix Provisioning Service Target Device x64.

 Select I accept the terms in the license agreement, click Next.

Leave as default, click Next.

Leave as default, click Next.

At Ready to install the program, click Install.

Installation will begin and take a few minutes to complete.

Click Finish at Installation Wizard Completed.

At this stage the vDisk should be re-sealed ( based on your sealing techniques and re-distributed/Coped to each Provisioning Server

Update the BDM ISO.

We use the BDM ISO.


• Remember don’t check this unless your troubleshooting:

• Reason why is here:

Upload to your hypervisor storage. Datastor/Container

Now attach that ISO to the PVS Targets you upgraded on 4c. It will need a new ARDBIN file. ( If you forget this step, it will still boot. But will be slower and could get stuck in a loop.

  1. Citrix WEM 1811 upgrade to 1912 LTSR

The Workspace Environment Management components must be upgraded in the following order:

Infrastructure services:


Administration console:


The following changes are going to occur so be ready:

  • A new clean installation of the WEM Agent will result in a complete change of Service Names and Folder Structures as below
  • The new Service name is: Citrix WEM Agent Host Service
  • The new process name is: Wem.Agent.Service.exe
  • The new path structure is: %ProgramFiles%\Citrix\Workspace Environment Management Agent
  • An upgraded installation of the WEM agent will result in partial changes to your environment:
  • The new Service name is: Citrix WEM Agent Host Service
  • The new process name is: Wem.Agent.Service.exe
  • The path on the file system will not be altered and will remain as it was: %ProgramFiles%\Norskale\Norskale Agent Host
  • Be aware also that in both clean and upgraded deployments, the Windows Event logs will change from Norskale Agent Service to WEM Agent Service 
  • Source:

Infrastructure services:

I need .Net 4.7.1

For me, I selected yes now.

Reboot and logged in.


Open the database management Utility

  • I at this point just restarted the server
  • Check Database parameters (open the WEM Infrastructure Service Configurations).

You will notice the Port and old name (1811).

You will notice the Port and new name -1912.

  • *One thing to note on Port* 
  • Cache synchronization port. (Applicable to Workspace Environment Management 1909 and earlier; replaced by Cached data synchronization port in Workspace Environment Management 1912 and later.) The port on which the agent cache synchronization process connects to the infrastructure service to synchronize the agent cache with the infrastructure server. The cache synchronization port must be the same as the port you configured for the cache synchronization port (WEM Infrastructure Service Configuration > Network Settings) during the infrastructure services configuration. The port defaults to 8285 and corresponds to the AgentCacheSyncPort command-line argument.
  • Cached data synchronization port. (Applicable to Workspace Environment Management 1912 and later; replaces Cache synchronization port of Workspace Environment Management 1909 and earlier.) The port on which the agent cache synchronization process connects to the infrastructure service to synchronize the agent cache with the infrastructure server. The cached data synchronization port must be the same as the port you configured for the cached data synchronization port (WEM Infrastructure Service Configuration > Network Settings) during the infrastructure services configuration. The port defaults to 8288 and corresponds to the CachedDataSyncPort command-line argument. Alternatively, you can specify the port using a command-line option in the silent installation of the WEM agent 
  • Wayne Lui states its backwards compatible and still listens, but I would add this into your Firewall Rule set. 

Admin Console:


  • Upgrade the Agent on the machines 
  • I did this with the GUI, but I do this in production.
  • ##Install CMDLine with a SCCM task

Task 1:
“Citrix Workspace Environment Management Agent Setup.exe” Cloud=0 VUEMAppCmdDelay=5 WaitForNetwork=30 SyncForegroundPolicy=1 GpNetworkStartTimeoutPolicyValue=5 /log WEM2003.txt /quiet

Task 2:
##Copys Startup script 

xcopy “\\server\Citrix\Upgrade Files\WEM\2003\Workspace-Environment-Management-v-2003-01-00-01\WemRefreshCache\RefreshWEMAgentonReboot.bat” c:\scripts\refreshWemAgent /h /i /c /k /e /r /y

Task 3:
Then it runs a 

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe update
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe eqi 3

I took James Kindon’s script:

Then it’s called the same name as my older script (RefreshWEMAgentonReboot.bat), does a xcopy and places it in the same location. This way the scheduled task will still have the same name it runs. The CLI parameters are different but will do the same deal.

We use BISF to handle this during our sealing process.

Agents are completed.

One comment

Leave a Reply