All configuration changes to VirtFsService.exe.config should be reviewed with Liquidware Technical Support before being applied to production. Contact support.liquidware.com to open a case.
The settings covered in this article are intended for experienced administrators working directly with VirtFsService configuration files. Most deployments will not require changes to these settings.
📄 Contents
Overview
VirtFsService is the core FlexApp virtualization service responsible for file system and registry isolation, FlexApp disk mounting, and application layer delivery. It runs as a Windows service on every endpoint where FlexApp packages are delivered.
The VirtFsService.exe.config file contains five sections. Three of these (<configSections>, <startup>, and <runtime>) are build-managed and should never be modified manually. The configurable sections are:
-
<log4net>— Service log file path, verbosity level, rotation policy, and output format -
<MergedRegistryPaths>— Registry keys whose values are merged across isolation layers rather than replaced -
<userSettings>— Core service behavior: isolation mode, disk shadow cache, and exclusion lists -
<applicationSettings>— FlexApp delivery tuning: appstreaming, priority management, MSI tracking, and user data handling
The
<appSettings> section contains a ClientSettingsProvider URI and should be left blank unless directed by Liquidware engineering.
Logging Settings (<log4net>)
VirtFsService uses a single rolling file appender (ServiceAppender). The log filename is timestamped at service start and written to the system %TEMP% path by default.
| Setting | Default | Notes |
|---|---|---|
<level value> |
INFO |
Options: ALL | DEBUG | INFO | WARN | ERROR | FATAL. INFO is appropriate for production. Raise to DEBUG or ALL for active troubleshooting — revert immediately after, as VirtFsService generates significantly higher log volume at DEBUG in busy VDI environments. |
file (conversionPattern) |
%TEMP%\ProfileUnity\<ts>-VirtFsService.txt |
Log written to system TEMP with a timestamp per service start. To redirect to a static path, update this value. The target directory must exist before the service starts. |
AppendToFile |
false |
Options: true | false. false creates a new file on each service start. Set true only when consolidating to a static filename. |
rollingStyle |
Once / Size |
Two entries are present. Once (roll on startup) takes precedence. The Size entry applies when a static filename is configured. |
maxSizeRollBackups |
10 |
Range: Integer. Number of backup log files retained. Set higher than other components due to greater log volume in busy environments. |
maximumFileSize |
1MB |
Range: e.g. 1MB, 5MB. Maximum log file size before rolling (Size rolling style). 1 MB is appropriate for a persistent service. |
conversionPattern (layout) |
identity - [date] [thread] [level] class method message |
Includes class and method context — more verbose than standard patterns. Modify only for SIEM or log parser integration. |
Merged Registry Paths (<MergedRegistryPaths>)
This section defines registry keys whose values are merged across isolation layers rather than replaced. This is critical for multi-value keys like PATH and ProductReleaseIds where both the base image and the FlexApp layer need to contribute values simultaneously.
If a FlexApp layer is overwriting a base image registry value instead of appending to it, the affected key should be added here with the appropriate delimiter.
| Registry Key | Sep. | Purpose |
|---|---|---|
| SYSTEM\ControlSet001\Control\Session Manager\Environment\Path | ; | System PATH variable. Merged with semicolons so both base OS and FlexApp layer PATH entries are preserved. |
| SOFTWARE\Microsoft\Office\ClickToRun\Configuration\ProductReleaseIds | , | Office Click-to-Run product IDs. Merged so layered Office applications appear alongside base Office. |
| SYSTEM\ControlSet001\Control\Citrix\wfshell\TWI\LogoffCheckSysModules | , | Citrix logoff check modules. Merged to prevent FlexApp modules from being dropped at logoff. |
Removing a key from MergedRegistryPaths can cause FlexApp layer values to overwrite base image values for that registry location. Engineering review required before removing any entry.
Core Service Settings (<userSettings>)
Service Behavior
| Setting | Default | Notes |
|---|---|---|
SiteUrl |
http://localhost:9072 |
Local API endpoint for VirtFsService to communicate with the ProfileUnity service stack. Change the port only if 9072 conflicts with another service on the host. |
Pure |
True |
Options: True | False. True = pure isolation mode; all writes go to the FlexApp layer. False = passthrough writes to the base system. Leave True for all standard FlexApp deployments. |
PersistUserSettings |
True |
Options: True | False. Persists per-user settings across sessions. Disable only in stateless or non-persistent VDI where settings must not carry between sessions. |
MultiUserSettings |
True |
Options: True | False. Allows multiple concurrent users to maintain separate settings on shared hosts. Must be True for all RDSH and multi-session deployments. |
RefreshWaitIntervalMs |
3000 |
Range: Integer (ms). Polling interval for service configuration refresh. 3000 ms is standard. Reduce only if near-real-time updates are required; increases CPU overhead. |
Disk Shadow Cache
The disk shadow cache is used during FlexApp streaming and pre-caching operations. It should be located on a fast, persistent volume.
| Setting | Default | Notes |
|---|---|---|
DiskShadowCachePath |
C:\DiskShadowData |
Range: Local or UNC path. Directory for disk shadow cache. Change if C:\ is space-constrained or policy requires a specific drive. Path must be persistent across reboots. |
DiskShadowBlockSizeBytes |
1048576 (1 MB) |
Range: Integer (bytes). Block size for shadow cache I/O. Increase for high-throughput storage such as NVMe; decrease if target storage performs better with smaller I/O. Adjust only on engineering guidance. |
Isolation Exclusion Lists
The following settings are XML arrays pre-populated with OS paths and registry keys excluded from FlexApp isolation tracking.
The large pre-populated exclusion lists (IgnoredFsPaths and IgnoredRegPaths) should not be edited directly. Manage them with engineering guidance. Do not remove existing entries from any exclusion list without review.
| Setting | Default Contents | Guidance |
|---|---|---|
FsMicroIsolationExcludedPaths |
2 entries (C:\windows\winsxs, C:\Users\Public\Desktop) | Paths excluded from filesystem micro-isolation. Add entries when a FlexApp incorrectly captures OS-managed FS locations. Do not remove existing entries. |
RegMicroIsolationExcludedPaths |
2 entries (System PATH, Office C2R ProductReleaseIds) | Registry paths excluded from registry micro-isolation. Complements MergedRegistryPaths. Add entries when a registry location is being incorrectly isolated. |
CloakRoots |
(empty) | Paths hidden from applications running inside isolation. Populated on engineering direction only — specific application compatibility scenarios. |
IgnoredProcesses |
(empty) | Processes whose file and registry activity is entirely ignored by the service. Add when a background agent causes excessive isolation noise. |
IgnoredFsPaths |
~75 pre-populated entries | Large exclusion list: Windows system paths (Temp, SoftwareDistribution, Installer), ProgramData\Microsoft, WindowsAzure, and third-party agent paths. Manage via ProfileUnity console or engineering only. |
IgnoredRegPaths |
~180 pre-populated entries | Comprehensive exclusion list: Windows services, security products (Defender, CrowdStrike, Sophos, Symantec), VDI agents (Citrix, VMware, RDP), OS subsystems. Manage via ProfileUnity console or engineering only. |
Services
| Setting | Default | Notes |
|---|---|---|
StartedServices |
osppsvc |
XML array of Windows service names that VirtFsService ensures are started before FlexApp mount operations. osppsvc = Office Software Protection Platform. Add service names when a FlexApp package requires a dependent service running at mount time. |
SecuredRegKeys |
Office SPP platform keys |
XML array of registry key paths whose custom ACLs are captured and replayed during FlexApp layer delivery. By default, ACLs are not stored. The default entry covers Office SPP keys where permission fidelity is required for licensing. Add additional keys only when an application requires specific ACLs that inheritance alone will not provide. |
FlexApp Delivery Settings (<applicationSettings>)
AppStreaming
AppStreaming enables FlexApp content to be pre-cached to the endpoint before the user session begins, reducing application launch latency in WAN and remote office deployments.
| Setting | Default | Notes |
|---|---|---|
AppstreamMode |
False |
Options: True | False. Enables FlexApp pre-streaming. Enable when network latency causes visible app launch delays in remote or WAN deployments. |
AppstreamSubmitDelayMs |
5000 |
Range: Integer (ms). Delay before pre-cache requests are submitted. Increase if appstreaming fires before the user session is fully initialized. |
AppstreamWaitIntervalBaseMs |
100 |
Range: Integer (ms). Base polling interval during appstream operations. Adjust only on engineering direction. |
AppstreamRetryCount |
5 |
Range: Integer. Retry attempts for failed appstream operations. Increase for unreliable or high-latency network paths. |
PreCacheRateLimitKbps |
0 (unlimited) |
Range: Integer (Kbps). 0 = unlimited. Set a cap in bandwidth-constrained environments to prevent pre-caching from saturating WAN links. |
MaxSimultaneousPlaybacks |
0 (unlimited) |
Range: Integer. 0 = unlimited. Set a limit on high-density RDSH hosts if simultaneous mounts at session start cause storage I/O spikes. |
Disk Shadow Cache & MSI Tracking
| Setting | Default | Notes |
|---|---|---|
DiskShadowCacheExpirationDays |
7 |
Range: Integer (days). Days before disk shadow cache entries expire and are purged. Reduce if the cache directory grows too large; increase if pre-cached content is expiring before users access it. |
DisksPerSentinel |
1 |
Range: Integer. FlexApp disks managed per sentinel process. 1 provides maximum isolation between app layers. Increase only on engineering guidance for specific high-density scenarios. |
EnableMsiTracking |
True |
Options: True | False. Tracks MSI installer activity via msiexec.exe. Required for correct capture of application installs into FlexApp layers. Disable only if causing packaging workflow conflicts. |
MonitoredProcesses |
msiexec.exe |
Range: XML array. Processes tracked for FlexApp capture. Expand if additional installer wrappers (e.g. setup.exe) need to be monitored. |
RecordFlexappData |
True |
Options: True | False. Records FlexApp operational data for diagnostics and reporting. Disable only if storage overhead is a concern and telemetry is not required. |
Dynamic Priority Management
These settings control how VirtFsService adjusts the CPU priority of FlexApp mount operations in response to system load, protecting interactive session performance on shared hosts.
| Setting | Default | Notes |
|---|---|---|
EnableDynamicPriorityManagement |
True |
Options: True | False. Enables CPU-aware dynamic priority adjustment for FlexApp mount operations. When CPU is under load, mount priority is reduced to protect interactive session performance. Leave True. |
EnableDynamicPriorityManagementRds |
True |
Options: True | False. Same behavior as EnableDynamicPriorityManagement, specifically enforced on RDSH and multi-session hosts. Should always match EnableDynamicPriorityManagement. |
DynamicPriorityCpuThreshold |
100 |
Range: 0–100 (%). CPU utilization % at which priority reduction activates. 100 = throttle only at full saturation. Lower to 75–80 to protect session performance sooner under load. |
DynamicPriorityUtilizationHoldTimeSeconds |
3 |
Range: Integer (sec). How long elevated CPU must persist before priority is reduced. Prevents transient spikes from triggering unnecessary throttling. |
PriorityBoost |
1 |
Range: Integer. Thread priority boost for VirtFsService worker threads. 1 = slight boost above normal. Adjust only on engineering guidance. |
SentinelPriorityBoost |
1 |
Range: Integer. Thread priority boost for sentinel processes. Same guidance as PriorityBoost. |
IgnoredDynamicPriorityProcesses |
chrome, firefox, msedge, brave, opera, safari |
Range: XML array. Processes excluded from dynamic priority management. Browser processes are excluded by default because their high-frequency I/O would otherwise constantly trigger throttling. |
User & Browser Data
| Setting | Default | Notes |
|---|---|---|
HandleUserData |
False |
Options: True | False. Enables VirtFsService to manage user profile data as part of FlexApp delivery. Disabled by default — ProfileUnity handles user data separately. Enable only when configured for integrated user data workflows. |
UserDataDirectory |
ProU_UserData |
Subdirectory for user data storage when HandleUserData is True. Relative to the user profile root. |
HandleBrowserData |
False |
Options: True | False. Enables special handling of browser profile data within the FlexApp layer. Enable when browser profiles are included in a FlexApp package. |
OneDriveHandlerEnabled |
False |
Options: True | False. Enables the OneDrive-aware handler that prevents conflicts between OneDrive sync and FlexApp VHDX operations. Enable in all environments where OneDrive is deployed alongside FlexApp. |
Isolation Playback & Differential
These settings control how the service replays isolation layers and tracks differential changes. The large pre-populated arrays should not be edited directly.
| Setting | Default | Notes |
|---|---|---|
MiniFilterMode |
True | Uses the Windows minifilter driver for filesystem interception. True is required for correct operation. Do not change. |
DifferentialPaths |
(empty) | XML array of paths tracked for differential capture. Populated by engineering for specific packaging scenarios requiring granular change tracking. |
IgnoredDifferentialDirs |
~27 AppData subdirectories | AppData subdirectories excluded from differential tracking. Covers transient and system-managed locations (Temp, Packages, OneDrive, Microsoft, etc.). Do not reduce without engineering review. |
IgnoredRegCreatePaths |
Installer\UserData\S-1-5-18\Components | Registry paths excluded from registry create tracking. Prevents MSI system component keys from being incorrectly captured into FlexApp layers. |
PassthroughRegRules |
SYSTEM\ControlSet00?\Services\W32Time | Registry path patterns (wildcards supported) that pass through isolation without capture. W32Time excluded to prevent time service config from being layered. |
IgnoredPlaybackRegKeys |
HKLM\COMPONENTS, SECURITY, Explorer, AppModel, AppX, AppReadiness, HKU Explorer | Registry keys excluded from isolation playback. Prevents OS-managed keys from being replayed when a FlexApp layer is applied. |
IgnoredPlaybackRegValues |
ProductName, PendingFileRenameOperations | Registry values excluded from playback. Prevents OS identity and pending rename operations from being overwritten during layer application. |
UserMoveHandlingPaths |
TileDataLayer, WebCache, SettingSync metastore | AppData paths with special move/redirect handling during FlexApp operations. Related to Windows Store app and settings sync artifacts. |
Miscellaneous
| Setting | Default | Notes |
|---|---|---|
CrashDumpDirectory |
%programdata%\Liquidware\Flexapp\CrashDumps
|
Directory for VirtFsService crash dumps. Default is appropriate for most environments. Change if ProgramData is constrained or dumps need to go to a monitored location. |
DisableMountBundleCheckImpersonation |
False |
Options: True | False. Disables user impersonation during bundle mount checks. Leave False. Set True only on engineering direction to resolve specific impersonation-related mount failures. |
AllowFaOneOutOfBandLaunch |
True |
Options: True | False. Allows FlexApp One applications to launch outside of the standard mount flow. Required for FlexApp One deployments. Disable only if out-of-band launch is explicitly prohibited by security policy. |
InstallLegacyDriver |
False |
Options: True | False. Controls whether the legacy VirtFs kernel driver is installed alongside the current driver. Set True only when a specific application requires legacy driver behavior — engineering direction only. |
Common Scenarios & Recommended Adjustments
All configuration changes should be reviewed with Liquidware Technical Support before deployment.
FlexApp Layer Overwrites System PATH or Other Multi-Value Registry Keys
- Add the affected key to
<MergedRegistryPaths>with the appropriate delimiter (;for PATH,,for list values). - Confirm the key is also present in
RegMicroIsolationExcludedPathsso it is not micro-isolated.
Excessive Logging / Log Directory Growing Rapidly
- Set
<level value>back to INFO if DEBUG or ALL was left enabled after troubleshooting. - Confirm the log path has adequate disk space. The default system TEMP location may reside on C:\.
- If using a static filename, verify
maxSizeRollBackupsandmaximumFileSizeare set appropriately.
FlexApp Mount I/O Spikes Causing Session Slowdowns on RDSH
- Confirm
EnableDynamicPriorityManagementandEnableDynamicPriorityManagementRdsare both True. - Lower
DynamicPriorityCpuThresholdto 75–80 to trigger throttling sooner under load. - Set
MaxSimultaneousPlaybacksto limit the number of concurrent mounts during logon storms.
OneDrive Sync Conflicts with FlexApp VHDX Operations
- Set
OneDriveHandlerEnabled = Trueto activate the OneDrive-aware handler. - Refer to the Liquidware OneDrive/VHDX conflict KB article for full remediation steps.
Application in FlexApp Layer Not Seeing an Expected Service Running
- Add the required service name to the
StartedServicesXML array. - Restart VirtFsService after the change for it to take effect.
FlexApp Not Pre-Caching in WAN / Remote Office Deployments
- Enable
AppstreamMode = True. - Set
PreCacheRateLimitKbpsif bandwidth must be capped to protect WAN links. - Increase
AppstreamRetryCountif the network path is unreliable.
Quick Reference
The most frequently tuned settings at a glance. Refer to the sections above for full guidance.
| Setting | Default | Section | Change When... |
|---|---|---|---|
<level value> |
INFO |
log4net |
Active troubleshooting only — revert to INFO after |
file conversionPattern |
%TEMP%\... |
log4net |
Redirecting logs to a static path or different volume |
SiteUrl |
:9072 |
userSettings |
Port 9072 conflicts with another service |
PersistUserSettings |
True |
userSettings |
Stateless / non-persistent VDI — set False |
MultiUserSettings |
True |
userSettings |
Must be True for all RDSH / multi-session deployments |
DiskShadowCachePath |
C:\DiskShadowData |
userSettings |
C:\ constrained or policy requires a specific drive |
StartedServices |
osppsvc |
userSettings |
FlexApp requires an additional service at mount time |
AppstreamMode |
False |
applicationSettings |
WAN / remote deployments with app launch latency |
PreCacheRateLimitKbps |
0 (unlimited) |
applicationSettings |
Bandwidth cap needed for pre-caching |
MaxSimultaneousPlaybacks |
0 (unlimited) |
applicationSettings |
Limiting concurrent mounts on high-density RDSH |
DiskShadowCacheExpirationDays |
7 |
applicationSettings |
Cache growing too large or expiring too quickly |
OneDriveHandlerEnabled |
False |
applicationSettings |
OneDrive deployed alongside FlexApp — set True |
EnableDynamicPriorityManagement |
True |
applicationSettings |
Disable only if priority management causes issues |
DynamicPriorityCpuThreshold |
100 |
applicationSettings |
Lower (e.g., 80) to protect session performance sooner |
AllowFaOneOutOfBandLaunch |
True |
applicationSettings |
Security policy prohibits out-of-band launch |
CrashDumpDirectory |
%programdata%\... |
applicationSettings |
ProgramData constrained or a monitored path needed |
InstallLegacyDriver |
False |
applicationSettings |
Engineering direction only — specific app compat |
If you have questions about any setting or need help evaluating a configuration change, contact Liquidware Technical Support at support.liquidware.com.
| Product | Liquidware FlexApp / ProfileUnity |
| Component | VirtFsService.exe.config |
| Applies To | FlexApp 6.x and later |
| Updated | June 15, 2026 |