All configuration changes to
LwL.ProfileUnity.Client.CmdService.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 ProfileUnity client configuration files. Most deployments will not require changes to these defaults.
📄 Contents
- › Overview
- › Logging Settings
- › Data Watcher Settings
- › Service Behavior
- › Citrix / ICA Session Events
- › Client Optimizations
- › UserInit Monitoring
- › AppStream Pre-warm
- › ProfileDisk
- › Logoff Behavior
- › Log Cleanup at Logon
- › Cloud Storage (S3)
- › MSIX App Attach Integration
- › Common Scenarios & Recommended Adjustments
- › Quick Reference
Overview
The ProfileUnity Client Command Service (LwL.ProfileUnity.Client.CmdService.exe) is a Windows service that runs on every managed endpoint. It acts as the execution engine for ProfileUnity client-side operations, handling session event callbacks, command dispatching, AppStream pre-warming, ProfileDisk detach at logoff, client optimizations, and MSIX App Attach integration.
The configuration file is located at:
C:\Program Files\ProfileUnity\Client Net\LwL.ProfileUnity.Client.CmdService.exe.config
The file contains four sections. Three (<configSections>, <runtime>, and <startup>) are build-managed assembly binding redirects and runtime declarations — do not modify them. The one configurable section is:
-
<userSettings>— all tunable service settings, organized by functional area in the sections below
Changes to this file take effect only after the ProfileUnity Client Command Service is restarted. In non-persistent VDI environments, update the master image and recompose rather than editing the file on running endpoints.
Logging Settings
Controls log verbosity, log file location, and automatic log retention. Log files are written to %TEMP%\ProfileUnity\ by default, with a timestamped filename per service start.
| Setting | Default | Notes |
|---|---|---|
LogLevel |
Fatal |
Options: Fatal | Error | Warn | Info | Debug | All. Fatal logs only hard failures. Raise to Debug or All for active troubleshooting — revert immediately after, as verbose logging generates high volume in busy session environments. |
LogPath |
(empty) | Directory for log file output. Empty = default system %TEMP%\ProfileUnity\. Set a static path to redirect logs to a monitored or persistent location. The target directory must exist before the service starts. |
LogName |
(empty) | Override for the log filename. Empty = auto-generated timestamped filename per service start. Set only when consolidating to a single static log file (e.g. for SIEM ingestion). |
DeleteLogsOlderThanNMinutes |
10080 |
Range: Integer (minutes). 10080 = 7 days. Log files older than this value are deleted during the logon cleanup cycle. Reduce on high-density hosts where log volume is a storage concern; increase if longer retention is needed for forensics or support cases. |
Data Watcher Settings
The CmdService uses a file-based command queue. It monitors a local data folder for incoming command files dropped by the ProfileUnity client stack and processes them in order. These settings control the queue location and polling behavior.
| Setting | Default | Notes |
|---|---|---|
DataFolder |
C:\Program Files\ProfileUnity\Client.NET\CmdServiceData |
Directory the service monitors for incoming command files. Change only if the default location conflicts with endpoint security policy or disk layout. The path must be on a local drive and writable by the service account. |
DataFile |
(empty) | Override for a specific command queue filename. Empty = the service watches for any command file in DataFolder. Set only on engineering direction for specific single-file queue scenarios. |
DataWatcherDelayInMs |
100 |
Range: Integer (ms). Polling interval for the data folder watcher. 100 ms is appropriate for standard deployments. Increase only if CPU overhead from polling is a concern on constrained hardware. |
Service Behavior
| Setting | Default | Notes |
|---|---|---|
ServiceStartupDelayInMs |
0 |
Range: Integer (ms). Delay before the service begins processing after starting. 0 = no delay. Increase (e.g. 2000–5000) if the service is starting before dependent services or the network stack is ready on boot, causing transient failures. |
ProfileUnityRelativePath |
Program Files\ProfileUnity |
Relative path (from the drive root) to the ProfileUnity installation directory. Used by the service to locate companion executables. Change only if ProfileUnity was installed to a non-default path — requires engineering guidance. |
CmdTimeoutInMs |
60000 |
Range: Integer (ms). Maximum time allowed for a single command execution before it is considered timed out. 60000 (60 seconds) is appropriate for most operations. Increase only if specific long-running commands (e.g. large portability saves) are consistently timing out in the logs. |
JobDelayInMs |
0 |
Range: Integer (ms). Delay injected between consecutive job executions. 0 = process jobs as fast as they arrive. Increase on resource-constrained hosts if rapid back-to-back job execution is causing CPU or I/O spikes. |
Citrix / ICA Session Events
These settings control which Citrix ICA session lifecycle events trigger ProfileUnity callbacks. Callbacks are used to run portability saves, FlexApp operations, or other client actions in response to session connect, disconnect, lock, and unlock events. All four are enabled by default to support the broadest set of Citrix deployment scenarios.
| Setting | Default | Notes |
|---|---|---|
IcaConnectTriggeredByRemoteConnect |
True |
Options: True | False. Fires a connect callback when the user reconnects to an ICA session remotely (session resumes after disconnect). Disable only if connect callbacks are causing duplicate operations on reconnect. |
IcaConnectTriggerBySessionUnlock |
True |
Options: True | False. Fires a connect callback when the user unlocks a locked ICA session. Disable if unlock-triggered callbacks are not required by your portability or FlexApp policy. |
IcaDisconnectTriggeredByRemoteDisconnect |
True |
Options: True | False. Fires a disconnect callback when the user disconnects from an ICA session (session stays alive on server). Required if portability saves or FlexApp operations should run at disconnect rather than only at logoff. |
IcaDisconnectTriggeredBySessionLock |
True |
Options: True | False. Fires a disconnect callback when the user locks the ICA session. Disable if lock-triggered disconnect callbacks are not required — for example, if lock events should not trigger a portability save mid-session. |
Client Optimizations
These settings enable or disable post-install and boot-time optimization tasks run by the CmdService. All three are enabled by default and are appropriate for standard VDI and physical desktop deployments.
| Setting | Default | Notes |
|---|---|---|
RunClientOptimizationLodctr |
True |
Options: True | False. Runs lodctr /R to rebuild the Windows performance counter registry during client optimization. Disable if your environment manages performance counters independently or if lodctr is blocked by security policy. |
RunClientOptimizationPcoip |
True |
Options: True | False. Runs the PCoIP protocol optimization step at client startup. Relevant for VMware Horizon PCoIP deployments. Disable if PCoIP is not in use in your environment to avoid unnecessary processing at boot. |
RunClientOptimizationPrecache |
True |
Options: True | False. Runs the ProfileUnity precache optimization step. Enables prefetching of FlexApp or portability data to reduce latency at first use. Disable only if precaching is causing boot-time I/O contention. |
UserInit Monitoring
Controls whether the CmdService monitors the UserInit registry key for activity. This is used to detect shell initialization milestones and coordinate post-logon actions at the right point in the session startup sequence.
| Setting | Default | Notes |
|---|---|---|
MonitorRegUserInitForXMs |
-1 |
Range: Integer (ms). -1 = disabled (monitoring does not run). Set to a positive value to enable UserInit registry monitoring for that duration after logon. Enable only on engineering guidance when post-logon action timing issues are being diagnosed. |
MonitorRegUserInitDelaySetMs |
5000 |
Range: Integer (ms). Delay after the UserInit registry event is detected before the associated action fires. Only relevant when MonitorRegUserInitForXMs is set to a positive value. |
AppStream Pre-warm
AppStream pre-warming causes the CmdService to initiate FlexApp content pre-caching at a configurable delay after service start, reducing application launch latency on first use within the session.
| Setting | Default | Notes |
|---|---|---|
AppStreamPrewarm |
True |
Options: True | False. Enables AppStream pre-warming at service startup. Pre-warming is beneficial in WAN and remote office deployments where FlexApp packages are delivered over a slower path. Disable only if pre-warming is causing boot-time network or I/O contention. |
AppStreamPrewarmDelay |
60000 |
Range: Integer (ms). How long after service start the pre-warm operation begins. 60000 (60 seconds) allows the session and network stack to fully initialize before pre-caching begins. Increase if pre-warming is firing before the user's session is ready; decrease if faster pre-caching is needed. |
ProfileDisk
| Setting | Default | Notes |
|---|---|---|
DetachProfileDiskDelay |
5000 |
Range: Integer (ms). Delay between the logoff signal and the ProfileDisk VHDX detach operation. 5000 ms (5 seconds) allows in-flight writes to complete before the disk is detached. Increase if VHDX corruption or write-loss errors appear in logs at logoff — this provides more time for OS-level profile flushes to complete. |
Logoff Behavior
These settings allow the CmdService to trigger a machine restart or shutdown automatically at user logoff. Both are disabled by default; they are intended for specific non-persistent VDI deployment patterns where the hypervisor does not manage machine recompose independently.
LogoffRestarts or LogoffShutsdown on multi-session (RDSH/Citrix) hosts will restart or shut down the machine when any user logs off, affecting all other active sessions.
| Setting | Default | Notes |
|---|---|---|
LogoffRestarts |
False |
Options: True | False. When True, the machine restarts automatically after user logoff. Used in non-persistent VDI deployments that require a full reboot to reset the machine state between sessions. Do not enable on multi-session hosts. |
LogoffShutsdown |
False |
Options: True | False. When True, the machine shuts down after user logoff instead of restarting. Useful for physical desktops or VMs where the hypervisor should power off the guest after the session ends. Mutually exclusive with LogoffRestarts — do not enable both. |
LogoffShutdownRestartDelayMs |
0 |
Range: Integer (ms). Delay between logoff completion and the restart or shutdown operation. 0 = immediate. Increase (e.g. 5000–15000) to allow logoff scripts, portability saves, or ProfileDisk detach to complete before the machine powers off. |
Log Cleanup at Logon
The CmdService runs a log file cleanup sweep during each logon to prevent unbounded accumulation of log files. These settings control the timing of that sweep.
| Setting | Default | Notes |
|---|---|---|
CleanupLogsOnLogonInitialDelayMs |
60000 |
Range: Integer (ms). Delay after logon before the log cleanup sweep begins. 60 seconds allows logon-time operations to complete and ensures newly created log files are not immediately eligible for deletion. |
CleanupLogsOnLogonLoopDelayMs |
100 |
Range: Integer (ms). Polling interval between individual file deletion operations during the cleanup sweep. 100 ms paces the I/O load of the sweep. Increase if the cleanup sweep is causing visible disk I/O spikes at logon. |
Cloud Storage (S3)
These settings tune S3-compatible cloud storage timeouts for environments where ProfileUnity is configured to deliver content from Amazon S3, Google Cloud Storage, or compatible object stores. Both are empty by default, which uses the AWS SDK default timeouts.
| Setting | Default | Notes |
|---|---|---|
S3ReadWriteTimeoutMs |
(empty = SDK default) | Range: Integer (ms). Timeout for individual S3 read and write operations. Set when S3 transfers are timing out on high-latency paths. Consult Liquidware Support for appropriate values before changing. |
S3TimeoutMs |
(empty = SDK default) |
Range: Integer (ms). Overall S3 request timeout (connection + transfer). Applies as the outer timeout for the full S3 operation. Set in conjunction with S3ReadWriteTimeoutMs on high-latency or unreliable paths. |
MSIX App Attach Integration
| Setting | Default | Notes |
|---|---|---|
RunAppAttachIntegration |
True |
Options: True | False. Enables MSIX App Attach integration, allowing the CmdService to participate in App Attach mount and unmount operations on Windows 10/11 and Azure Virtual Desktop session hosts. Disable only if MSIX App Attach is not in use in your environment or if App Attach operations are being handled entirely by another component. |
Common Scenarios & Recommended Adjustments
All configuration changes should be reviewed with Liquidware Technical Support before deployment to production.
Service starts before network is available (transient failures at boot)
- Set
ServiceStartupDelayInMsto 3000–5000 to allow the network stack to fully initialize before the service begins processing commands.
ProfileDisk VHDX corruption or data loss at logoff
- Increase
DetachProfileDiskDelayfrom 5000 to 10000–15000 ms to allow profile writes to flush before the VHDX is detached. - If
LogoffRestartsorLogoffShutsdownis enabled, setLogoffShutdownRestartDelayMsto at least the same value asDetachProfileDiskDelayto ensure detach completes before the restart fires.
Citrix disconnect callbacks triggering unwanted portability saves on session lock
- Set
IcaDisconnectTriggeredBySessionLockto False to stop disconnect callbacks firing on lock without affecting the remote-disconnect callback behavior.
AppStream pre-warming firing before the user's session is ready
- Increase
AppStreamPrewarmDelayfrom 60000 to 90000–120000 ms so pre-warming begins after the session and FlexApp mount operations have fully completed.
Log directory growing rapidly on high-density hosts
- Reduce
DeleteLogsOlderThanNMinutesfrom 10080 (7 days) to a shorter retention window (e.g. 2880 = 2 days) on RDSH or Citrix hosts with many daily sessions. - Confirm
LogLevelhas been reverted to Fatal after any troubleshooting session — verbose logging is the most common cause of unexpected log growth.
Non-persistent VDI — machine should restart after each logoff
- Set
LogoffRestartsto True andLogoffShutsdownto False (never enable both). - Set
LogoffShutdownRestartDelayMsto at least 10000–15000 ms to allow ProfileDisk detach and portability saves to complete before the restart. - Confirm the deployment is single-session — this setting must not be applied to RDSH or Citrix multi-session hosts.
Non-Citrix environment — disable unnecessary ICA callbacks
- Set all four
Ica*settings to False. On VMware Horizon, AVD, or physical desktop deployments, the ICA session event callbacks are not triggered and have no effect, but disabling them makes the configuration intent explicit.
S3 transfers timing out on high-latency or throttled paths
- Set
S3ReadWriteTimeoutMsandS3TimeoutMsto values appropriate for your path's measured latency. Contact Liquidware Support for guidance on specific values. - Set
S3TimeoutMs≥S3ReadWriteTimeoutMs— the overall timeout should always be at least as long as the per-operation timeout.
Quick Reference
The most frequently tuned settings at a glance. Refer to the sections above for full guidance.
| Setting | Default | Section | Change When... |
|---|---|---|---|
LogLevel |
Fatal |
Logging | Active troubleshooting only — revert to Fatal after |
DeleteLogsOlderThanNMinutes |
10080 |
Logging | Log directory growing too large on high-density hosts |
ServiceStartupDelayInMs |
0 |
Service Behavior | Service starts before network stack is ready at boot |
CmdTimeoutInMs |
60000 |
Service Behavior | Long-running commands timing out in logs |
IcaDisconnectTriggeredBySessionLock |
True |
Citrix / ICA | Session lock should not trigger a disconnect callback |
AppStreamPrewarm |
True |
AppStream Pre-warm | Pre-warm causing boot I/O contention — set False |
AppStreamPrewarmDelay |
60000 |
AppStream Pre-warm | Pre-warm fires before session is ready — increase |
DetachProfileDiskDelay |
5000 |
ProfileDisk | VHDX corruption or write-loss errors at logoff — increase |
LogoffRestarts |
False |
Logoff Behavior | Single-session non-persistent VDI must restart after logoff |
LogoffShutsdown |
False |
Logoff Behavior | VM should power off rather than restart after logoff |
LogoffShutdownRestartDelayMs |
0 |
Logoff Behavior | Allow saves / detach to finish before restart or shutdown fires |
RunAppAttachIntegration |
True |
App Attach | MSIX App Attach not in use — set False |
S3ReadWriteTimeoutMs |
(empty) | Cloud Storage | S3 transfers timing out on high-latency paths |
RunClientOptimizationPcoip |
True |
Optimizations | PCoIP not in use — set False |
If you have questions about any setting or need help evaluating a configuration change, contact Liquidware Technical Support at support.liquidware.com.
| Product | Liquidware ProfileUnity with FlexApp |
| Component | LwL.ProfileUnity.Client.CmdService.exe.config |
| Applies To | ProfileUnity Client 6.x and later |
| Updated | July 31, 2026 |