Why did every running FlexApp close in the middle of the day, with no error, while Windows Update was installing a .NET update?
On endpoints running ProfileUnity Client 6.9.5, a Microsoft .NET 10 update that installs while users are signed in closes every running FlexApp. No error or crash is reported, and unsaved work in those applications is lost. The update restarts the FlexApp Container Service, as it can restart any service that runs on the shared .NET runtime, and the Container Service closes FlexApps when it stops. It is avoided by installing .NET updates outside working hours. This article explains why it happens, how to confirm it, and how to schedule .NET updates so users are not affected.
See Managing .NET Core Security Updates for ProfileUnity FlexApp - Console and Client Side for the .NET runtime used by each ProfileUnity and FlexApp component in each release, and its support dates.
📄 Contents
Status
| Issue Status | BY DESIGN |
| Affected Versions | ProfileUnity Client 6.9.5, including its hotfixes. Earlier clients are not affected. The FlexApp Packaging Console 6.9.5 uses the same Container Service. On a packaging machine the service normally runs only while packaging or playing back a package, so only updates installed during that work are affected. |
| Fix Version | None. The behavior follows from the client running on the shared .NET 10 runtime. |
| Workaround Available | Yes. Install .NET updates outside working hours; see Scheduling .NET Updates › |
Symptoms
- All FlexApps open in the user's session close at the same moment, during the working day, with no error message.
- The Application log has no Application Error or crash event for the closed applications.
- At the same time, a .NET 10 update, such as a monthly .NET security update, was installing through Windows Update or another update tool.
- FlexApps may not start again in that session until the user signs out and signs back in.
.NET 8 and .NET Framework updates do not cause this on a 6.9.5 client, because the client does not use those runtimes for the Container Service.
Cause
FlexApps run through the Liquidware Labs Container Service (VirtFsService.exe). In ProfileUnity 6.8.6 and 6.8.7, the service carried its own copy of the .NET runtime inside its program file, so .NET updates never touched it; earlier versions ran it on .NET Framework. From 6.9.5, the client installs .NET 10 and a Container Service that runs on that shared runtime, as noted in Announcing ProfileUnity FlexApp 6.9.5. This allows smaller FlexApp installers and lets .NET be updated separately from ProfileUnity.
A .NET update installs the new runtime version and removes the previous one. While the Container Service is running, it is using the previous version's files, so the update uses Windows Restart Manager to stop the service, release the files, and restart the service once they are replaced. If the files cannot be released, the update asks for a device restart instead and finishes then. Other applications and services that run on the shared .NET runtime can be stopped and restarted the same way.
Whenever the Container Service is stopped, it ends the FlexApp application processes it is running. That is not new in 6.9.5; what is new is that a .NET update is one of the events that can stop it.
How to Confirm
Run the checks on the affected endpoint and compare the times with when the FlexApps closed.
Check 1 — Find the .NET update
In PowerShell, list the updates Windows Update installed:
Get-WinEvent -FilterHashtable @{LogName='System'; ProviderName='Microsoft-Windows-WindowsUpdateClient'; Id=19,43} | Where-Object Message -like '*.NET*' | Select-Object TimeCreated, Id, Message
Event 43 records when an update started installing and event 19 when it installed successfully. Look for a .NET 10 update installed at the time the FlexApps closed. If .NET is updated by a tool that does not use Windows Update, look instead in the Application log for MsiInstaller event 11724, which records the removal of the previous .NET runtime.
Check 2 — Find the Container Service restart
List the services Windows stopped and restarted to replace files in use:
Get-WinEvent -FilterHashtable @{LogName='Application'; ProviderName='Microsoft-Windows-RestartManager'; Id=10002,10003} | Where-Object Message -like '*Container Service*' | Select-Object TimeCreated, Id, Message
Event 10002 reads "Shutting down application or service 'Liquidware Labs Container Service'" and event 10003 records the restart. A match between Check 1 and Check 2 confirms the cause.
Check 3 — Optional: confirm the applications were ended by the service
In the VirtFsService log from that time (included in a ProfileUnity client diagnostic bundle), search for:
Terminating redirected process:
Each line names one FlexApp process that was closed when the service stopped.
Scheduling .NET Updates
Treat .NET updates on ProfileUnity 6.9.5 endpoints the way you treat updates that need a restart: install them when users are not working in FlexApps.
- Microsoft Intune update rings: .NET updates arrive through Windows Update when Microsoft product updates is set to Allow. For laptops and other user devices, set Automatic update behavior to Auto install at maintenance time, which installs when the device is not in use. For devices that stay powered on overnight, Auto install and restart at a scheduled time with a time outside working hours also works; a device that is off or asleep at that time waits for the next scheduled time or a deadline. A deadline can force an installation during the working day, so check deadlines as well.
- Group Policy: in Configure Automatic Updates, select 4 - Auto download and schedule the install and set Scheduled install time outside working hours.
- WSUS: .NET updates are listed under Developer Tools, Runtimes and Redistributables. Approved updates install on the Group Policy schedule above, unless an approval deadline has passed.
- Configuration Manager: deploy .NET updates to a collection with a maintenance window outside working hours.
- Session hosts (RDS, Azure Virtual Desktop): stop new sessions on the host, sign users out, install .NET updates, and then restart the host (see When signing users out is not enough). In Azure Virtual Desktop, drain mode or a scheduled session host update handles the sign-out.
- Non-persistent desktops: apply .NET updates to the base image rather than to running desktops.
When signing users out is not enough
When users are signed out while the update installs, FlexApps assigned at sign-in are normally removed at sign-out, so the Container Service restart does not affect them. On the following endpoints, FlexApps stay in place after users sign out, and the restart removes them even when nobody is signed in:
- Application Preservation Mode is enabled in the configuration.
- The Remote Desktop Services role is installed. FlexApp One packages are not removed at sign-out on these hosts.
- FlexApps are assigned at the machine level, through ProfileUnity running as a service.
On these endpoints, install .NET updates in a maintenance window that ends with a restart of the device, so FlexApps are set up again when the device starts and users sign in.
If FlexApps were closed by a .NET update, have the user save any work in other applications, sign out and sign back in. FlexApps are started again at the next sign-in. On the endpoints listed under When signing users out is not enough, restart the device instead.
FAQ
Why did this not happen before the upgrade to 6.9.5?
The Container Service in 6.8.6 and 6.8.7 carried its own copy of .NET, so a .NET update had nothing of ProfileUnity's to replace. The 6.9.5 Container Service uses the .NET 10 runtime installed on the endpoint, which .NET updates replace.
Should .NET 10 updates be blocked or delayed indefinitely?
No. .NET updates include security fixes, and ProfileUnity components rely on a supported, patched runtime. Schedule them; do not skip them.
Does the endpoint need a reboot after this happens?
Usually not: signing out and back in starts FlexApps again. Restart the device on endpoints with Application Preservation Mode enabled, the Remote Desktop Services role installed, or FlexApps assigned at the machine level. Unsaved work in the applications that closed cannot be recovered either way.
Related Articles
- Managing .NET Core Security Updates for ProfileUnity FlexApp - Console and Client Side
- Announcing ProfileUnity FlexApp 6.9.5
| Product | ProfileUnity |
| Applies To | ProfileUnity Client 6.9.5, FlexApp Packaging Console 6.9.5 |
| Updated | November 6, 2026 |