How does ProfileDisk get configured on client machines? What does LwL.ProfileUnity.Client.Startup.exe do?
ProfileDisk Setup and Client Configuration
This article explains how ProfileUnity configures ProfileDisk on client machines โ covering the
clientsettings.xml file generated by the Management Console, how
LwL.ProfileUnity.Client.Startup.exe consumes it, and the resulting update to
LwlLogonNotifier.exe.config. It also covers the full logon-time workflow,
prerequisites, common deployment scenarios (non-persistent VDI, persistent desktop,
secure/CAC environments), and a reference for the key clientsettings.xml fields.
๐ย Contents
- โบ How the Configuration Flow Works
- โบ Prerequisites
- โบ Step 1 โ Configure ProfileDisk in the Management Console
- โบ Step 2 โ Deploy clientsettings.xml to the Network Share
- โบ Step 3 โ Run LwL.ProfileUnity.Client.Startup.exe
- โบ What Gets Written to LwlLogonNotifier.exe.config
- โบ Logon-Time Workflow
- โบ CAC / Smart-Card Mode Setup
- โบ Deployment Scenarios
- โบ clientsettings.xml Field Reference
- โบ Related Articles
How the Configuration Flow Works
ProfileDisk configuration follows a three-stage pipeline:
-
Management Console โ
clientsettings.xml. After you define a ProfileDisk group in the Console (Administration โ ProfileDisk), the Console generates an encryptedclientsettings.xmlfile containing the broker connection, license server, FlexDisk service endpoint, disk mode, virtual disk path, size, and group-to-AD-group assignments. -
clientsettings.xmlโ Deployment Share. You deploy this file to the NETLOGON share (or the custom path shown under Administration โ ProfileUnity Tools โ Deployment Path) so that machines can reach it at logon time or during image preparation. -
LwL.ProfileUnity.Client.Startup.exeโLwlLogonNotifier.exe.config. The Startup executable readsclientsettings.xml, decrypts the relevant sections, and writes the ProfileDisk configuration intoC:\Program Files\ProfileUnity\FlexApp\LwlLogonNotifier.exe.config. At user logon, the NP credential manager (mpnotify.exe) reads this config and launchesLwlLogonNotifier.exeto mount the correct VHDX.
clientsettings.xml is stored on a network share and is readable by all machines.
Its sensitive values (connection strings, license endpoint) are encrypted.
LwlLogonNotifier.exe.config is a local machine file written during startup
or image preparation, keeping the logon-time path fast and offline-tolerant.
Prerequisites
- ProfileUnity Console and Client Tools must be on the same version. See the ProfileUnity Version Matrix for current build numbers.
- A dedicated file share for ProfileDisk VHDX files is recommended. Grant the Domain Computers group Create / Read / Modify permissions on the share and the folder that will contain the per-user VHDX files.
- Create an AD group to assign users to the ProfileDisk configuration group.
-
Secondary Logon service: ProfileDisk mounts the VHDX using an impersonation
token by default. If the Secondary Logon service is disabled in your environment, add the
registry value
pdusecomputerperms=1(DWORD) underHKLM\Software\Liquidware Labs\ProfileUnityon the master image or via GPO before running the Startup executable. See How to enable ProfileDisk with Secondary Logon Disabled. - CAC / smart-card environments: Additional Kerberos delegation steps are required. See ProfileDisk not Mounting in Highly Secured Environments using CAC Authentication and the CAC Best Practices guide.
- Server OS used as a desktop: VHD/VHDX mounting on Server editions requires the Hyper-V role or VHD-mount capability. See ProfileDisk does not mount on Server Operating Systems used as a desktop.
Step 1 โ Configure ProfileDisk in the Management Console
- In the Management Console, navigate to Administration โ ProfileDisk.
- Click Add ProfileDisk Group and configure:
- AD Group Assignment โ the group whose members will receive this ProfileDisk.
- Storage Type โ VHD or VHDX (VHDX recommended for Windows 8.1/Server 2012 R2 and later).
-
Virtual Disk Path โ UNC path with the
%username%variable, e.g.\\server\ProfileDiskShare\ProfileDisk\%username%\%username%.vhdx. - Disk Size โ initial size in GB (expandable disks grow as needed up to this limit).
- Disk Format โ Fixed or Expandable.
- Multi-Session โ enable if users may log on to multiple machines simultaneously (e.g. RDS/Citrix).
- Click Save Assignments, then Update.
- Verify that Communication Type to Broker Messages is set to VHDX ProfileDisk. Click Update if you change it.
Step 2 โ Deploy clientsettings.xml to the Network Share
After saving the ProfileDisk group, the Console updates its internal
clientsettings.xml. You must push this file to the deployment share so that
clients can read it.
- In the Management Console, go to Administration โ ProfileUnity Tools.
-
Click Download or Deploy Client Settings. Confirm that the Deployment Path
shown (typically
\\domain\NETLOGON\ProfileUnityor a custom share) is correct. - Check Overwrite existing files and click Deploy.
-
Verify that
clientsettings.xmlis present in the deployment share and has been updated (check the file's last-modified timestamp).
Whenever you upgrade the Console, redeploy both the client tools zip and
clientsettings.xml from the same Administration page. Client tools and the
Console must be on the same build. See the
Version Matrix
for compatibility rules.
The deployed clientsettings.xml uses an encrypted format for connection strings.
The plaintext structure contains these logical sections (see
Field Reference below for details):
<?xml version="1.0" encoding="utf-8"?>
<ProfileDiskConfig xmlns:xsi="..." xmlns:xsd="..." version="3.0">
<MqConnectionString>[encrypted]</MqConnectionString>
<LicenseServerConnectionString>[encrypted]</LicenseServerConnectionString>
<FlexDiskConnectionString>[encrypted]</FlexDiskConnectionString>
<DiskMode>VHD</DiskMode>
<ProfileDiskConfigGroups>
<ProfileDiskConfigGroup>
<Assignments>
<Assignment name="domain\AD-Group" sid="S-1-5-..." />
</Assignments>
<MultiSession>True</MultiSession>
<VirtualDiskCompression>False</VirtualDiskCompression>
<VirtualDiskFormat>Expandable</VirtualDiskFormat>
<VirtualDiskPath>\\server\share\%username%\%username%_.vhdx</VirtualDiskPath>
<VirtualDiskSizeInGb>20</VirtualDiskSizeInGb>
</ProfileDiskConfigGroup>
</ProfileDiskConfigGroups>
<LicenseMode>NamedUser</LicenseMode>
</ProfileDiskConfig>
Step 3 โ Run LwL.ProfileUnity.Client.Startup.exe
LwL.ProfileUnity.Client.Startup.exe is the bootstrap executable that reads
clientsettings.xml from the deployment share and updates the local client
configuration. It must run in the SYSTEM context (or with local admin
rights) so it can write to C:\Program Files\ProfileUnity\FlexApp\.
How it locates clientsettings.xml
By default the executable looks in the same directory from which it is launched. When launched via GPO Computer Startup Script (the recommended method), the path is the UNC share path of the script itself, e.g.:
\\domain\NETLOGON\GPO-Name\LwL.ProfileUnity.Client.Startup.exe
You can override the path to clientsettings.xml with the registry value
ClientSettingsPath (REG_SZ) under
HKLM\Software\Liquidware Labs\ProfileUnity.
GPO Computer Startup Script (recommended)
The most reliable delivery mechanism is a Computer Configuration โ Windows Settings โ Scripts โ Startup GPO, targeting the machines that will use ProfileDisk. The image in this article shows an example GPO with the script configured as:
Name: \\domain\NETLOGON\GPO-Name\LwL.ProfileUnity.Client.Startup.exe
Parameters: (none required)
If your GPO shows "Not configured" for Script order, the script still runs; Script order only matters when multiple startup scripts are configured in the same GPO and you need a specific sequence.
What the Startup executable does
- Reads
clientsettings.xmlfrom the deployment share path. - Decrypts the connection strings (MQ broker, license server, FlexDisk service).
- Evaluates the
ProfileDiskConfigGroupsassignments to determine which groups are configured. - Writes the resolved ProfileDisk configuration into
C:\Program Files\ProfileUnity\FlexApp\LwlLogonNotifier.exe.config. - Verifies that the local client tools are current; if the version on the share is newer, it updates the local installation in-place (persistent desktops only โ non-persistent images should be recomposed).
What Gets Written to LwlLogonNotifier.exe.config
After a successful run of the Startup executable, the ProfileDisk section of
C:\Program Files\ProfileUnity\FlexApp\LwlLogonNotifier.exe.config is
populated with the decrypted endpoint addresses and the disk configuration for
each assigned group. To verify the update was applied:
- Open
C:\Program Files\ProfileUnity\FlexApp\LwlLogonNotifier.exe.configin a text editor. - Confirm that the
ProfileDiskConfigsection contains the correctVirtualDiskPathfor your environment. - Confirm that the connection strings are present (they remain encrypted in this file).
Run the Startup executable once on the master image (or wait for the first GPO-driven machine reboot), then open
LwlLogonNotifier.exe.config and search for
VirtualDiskPath. If the path matches what you configured in the Console,
the client is correctly configured and ready for logon.
Logon-Time Workflow
Once LwlLogonNotifier.exe.config is in place, the following sequence occurs
automatically each time a member of the assigned AD group logs on interactively.
All executables below reside in C:\Program Files\ProfileUnity\FlexApp\.
-
mpnotify.exeโ NP notification and group membership check. (logged inlwl_cred_mgr_*.txt) Windows calls the ProfileUnity Network Provider viampnotify.exeimmediately after the user authenticates. It confirms the logon is interactive (station nameWinsta0, Authentication Type:MSV1_0:InteractiveorKERBEROS:Interactive) โ programmatic logons detected via station nameSvcCtlare silently skipped. It then:- Reads
LwlLogonNotifier.exe.configand loads all configured AD group assignments. - Obtains the user's token, resolves the user's SID and group list (up to 14+ groups checked), and confirms the user is a member of the assigned AD group.
- Resolves the configured VHD path (
%username%substitution) and constructs theLwlLogonNotifier.execommand line:"LwlLogonNotifier.exe" -u <username> -s <SID> -v <VHDPath> -q <size> -c <compression> -f <format> - Launches
LwlLogonNotifier.exein the user's security context and waits for it to exit.
- Reads
-
LwlLogonNotifier.exeโ VHDX attach. Resolves%username%in the virtual disk path, checks whether the VHDX exists on the share, and callsvhd.exeto attach it:
On success, records the resolved VHDX path and attach time (ms) in the registry at"vhd.exe" /p \\server\share\<username>\ProfileDisk\<username>.vhdx /attachonly /log C:\Windows\Temp\ProfileUnityHKLM\Software\Liquidware Labs\ProfileDisk\<UserSID>(ProfileVhdPath,ProfileAttachTimeMs), then exits with code 0. TheLwlLogonNotifier.logfile is written toC:\Windows\Temp\ProfileUnity\. -
vhd.exeโ low-level VHD attach. Opens the VHDX file with read/write access and attaches it as a loopback disk (\\?\PhysicalDriveN). Logs toC:\Windows\Temp\ProfileUnity\asvhd.log. -
mpnotify.exeโ disk location, cap import, mount point, and reparse. (logged inlwl_cred_mgr_*.txt) AfterLwlLogonNotifier.exeexits (code 0),mpnotifyresumes and:- Locates the attached disk by volume label (e.g.
<username>-pd) via\\?\PhysicalDriveN/\\?\Volume{guid}\. - Creates the mount point at
C:\ProfileDiskMounts\<username>and grants the user full control to the volume. - Imports
userprofile.capfrom the VHDX (C:\ProfileDiskMounts\<username>\<username>\userprofile.cap), restoring all 12ProfileListregistry values includingProfileImagePath=C:\Users\<username>. - Sends the reparse point operations to the Container Service (local Kestrel HTTP
endpoint); each returns HTTP 200 on success:
-
C:\Users\<username>โC:\ProfileDiskMounts\<username>\<username> -
C:\Users\ProfileDisk\<username>โC:\ProfileDiskMounts\<username>\<username>(legacy path compatibility)
-
- Builds the
lwl_profile_mgr.execommand line and writes it to the registry asExportCommandunderHKLM\SOFTWARE\Liquidware Labs\ProfileDisk\<UserSID>:"lwl_profile_mgr.exe" /profilepath C:\ProfileDiskMounts\<username>\<username>
C:\Users\<username>. - Locates the attached disk by volume label (e.g.
-
lwl_profile_mgr.exeโ profile path setup and registry export. Called bympnotify.exeat logon using theExportCommandwritten in the previous step. It performs two roles:-
App and path fixup.
Applies Chrome and Edge user data directory policy keys pointing into the mounted
VHDX (
C:\ProfileDiskMounts\<username>\<username>\AppData\Local\...) and creates the AppV target path on the disk. -
Registry export.
Exports the current
ProfileListregistry key (all 12 values includingProfileImagePath) toC:\ProfileDiskMounts\<username>\<username>\userprofile.capon the VHDX. This cap file is whatmpnotifyimports at the start of the next logon (step 4c above) to restore the correct profile registry state before Windows loads the profile. Finally, it restores the default profile path registry value to%SystemDrive%\Users.
-
App and path fixup.
Applies Chrome and Edge user data directory policy keys pointing into the mounted
VHDX (
All ProfileUnity client logs are written to
C:\Windows\Temp\ProfileUnity\. Key log files:
-
lwl_cred_mgr_*.txtโ NP credential manager log; one file per logon event. The host process ismpnotify.exefor interactive logons andlsass.exefor programmatic/service logons (both write to this same log name). -
LwlLogonNotifier.logโ VHDX attach/detach log (LwlLogonNotifier.exe) -
vhd.logโ low-level VHD attach log (vhd.exe) -
lwl_profile_mgr_*.txtโ profile registry export/import log (lwl_profile_mgr.exe) -
msiexec_monitor*.logโ Container Service application virtualization log
CAC / Smart-Card Mode Setup
In environments that require CAC (Common Access Card) or smart-card authentication,
the standard ProfileDisk logon flow breaks at step 1 because mpnotify.exe
cannot obtain a usable Kerberos token from the smart-card logon to impersonate the user
when accessing the VHDX file share. Two resolution options are available; Option 1
(computer account) is recommended.
Regardless of which option you choose, the
SmartCardLogonNotify registry
value must be present on every client machine before users log on.
Without it, the Network Provider is not notified of smart-card logon events and
ProfileDisk will not mount.
Key:
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\NotifyValue:
SmartCardLogonNotify โ DWORD โ 1Deploy via GPO Registry preference or bake into the master image. A reboot is required after the value is set.
Option 1 โ Computer account for VHDX access (recommended)
This option uses the machine account (DOMAIN\ComputerName$) rather than
the user's token to mount the VHDX, avoiding Kerberos delegation entirely.
-
Move ProfileDisk storage outside the user profile share.
The VHDX path must reside in a dedicated share separate from user home directories.
Update the
VirtualDiskPathin the Management Console to point to the new share, then redeployclientsettings.xml.
Before (avoid):\\server\share\%username%\ProfileDisk\%username%.vhdx
After (CAC):\\server\ProfileDiskShare\ProfileDisk\%username%\%username%.vhdx
The VHDX share must be separate from the share used for user home directories or roaming profiles โ the computer account needs access to it independently of the user's credentials. - Grant Domain Computers access to the VHDX share. Give the Domain Computers group Create / Read / Modify permissions on the share and the folder that will contain the VHDX files.
-
Enable ProfileDisk System Mount/Unmount via GPO ADMX.
In the ProfileUnity Computer GPO, navigate to:
Computer Configuration โ Administrative Templates โ Classic Administrative Templates โ Liquidware Labs โ ProfileUnity
Under both the 32-bit and 64-bit sections, set ProfileDisk System Mount Unmount to Enabled. - Set the SmartCardLogonNotify registry value as described in the callout above, then reboot.
Option 2 โ AD service account for VHDX access
- Create a dedicated service account in Active Directory with at least Read/Write permissions on the ProfileDisk VHDX share. Consider a share that contains only ProfileDisks (same guidance as Option 1). If the account password expires, the credential file must be regenerated โ consider maintaining two accounts for rotation.
-
Generate the credential file.
In the Management Console, hover over your username (top right) โ Administration
โ scroll to ProfileUnity Tools. Enter the service account credentials
and click Download or Deploy Service Configuration. Place the resulting
LwL.ProfileUnity.Client.Service.exe.credsfile in the same share/NETLOGON folder as the ProfileUnity client tools. - Ensure Startup.exe runs on boot from that same path. The creds file must be present alongside it. For Horizon Instant Clones, re-run on the master image after any creds update.
-
Enable ProfileDisk VHD CAC support via GPO ADMX.
In the ProfileUnity Computer GPO, navigate to:
Computer Configuration โ Administrative Templates โ Classic Administrative Templates โ Liquidware Labs โ ProfileUnity
Under both the 32-bit and 64-bit sections, set ProfileDisk VHD CAC to Enabled. - Set the SmartCardLogonNotify registry value as described in the callout above, then reboot.
The
lwl_cred_mgr_*.txt log will show:"Failed to create process like user: <profileunity.svc@domain>. Error: The service cannot be started, either because it is disabled or because it has no enabled devices associated with it."This error also appears when the Secondary Logon service is disabled (Option 2 only). If you see it with Option 1, confirm the GPO ADMX setting is applied and the machine has rebooted after the
SmartCardLogonNotify value was set.
For full details see the CAC Authentication Best Practices guide and KB: ProfileDisk not mounting in highly secured environments using CAC authentication.
Deployment Scenarios
| Environment | Recommended Method | Notes |
|---|---|---|
| Non-persistent VDI (gold image) | Run LwL.ProfileUnity.Client.Startup.exe during image preparation,
then seal and recompose. |
The updated LwlLogonNotifier.exe.config is baked into the
image. After a Console upgrade, update the image with new client tools and
re-run the Startup executable before recomposing. |
| Persistent desktops | GPO Computer Startup Script pointing to
\\NETLOGON\GPO-Name\LwL.ProfileUnity.Client.Startup.exe. |
The Startup executable handles in-place client-tool updates and refreshes
LwlLogonNotifier.exe.config on each reboot.
No reimage required after a Console upgrade. |
| RDS / Citrix (multi-session) | GPO Computer Startup Script on the session host; enable Multi-Session in the ProfileDisk group. | Each session host runs the Startup executable at boot. The multi-session flag allows the same VHDX to be opened concurrently from multiple sessions. |
| Secondary Logon disabled | Add pdusecomputerperms = 1 (DWORD) to
HKLM\Software\Liquidware Labs\ProfileUnity before running the
Startup executable. |
Switches the mount mechanism from impersonation to machine-account permissions. See KB: Secondary Logon Disabled. |
| CAC / smart-card | Follow the CAC Best Practices guide for Kerberos constrained delegation setup in addition to the standard steps. | See also KB: ProfileDisk not mounting in highly secured environments. |
| Server OS as desktop | Ensure the Hyper-V role (or equivalent VHD-mount capability) is installed. | See KB: ProfileDisk does not mount on Server OS used as a desktop. |
clientsettings.xml Field Reference
The table below describes each element in clientsettings.xml. The connection
string values are AES-encrypted by the Console and cannot be edited manually; all other
values are plaintext and reflect what was configured in the Management Console.
| Element | Description |
|---|---|
MqConnectionString |
Encrypted connection string for the ProfileUnity broker message queue (RabbitMQ). Used by the client to communicate mount/unmount events back to the server. |
LicenseServerConnectionString |
Encrypted connection string for the ProfileUnity License Service. The client checks out a seat at logon. |
FlexDiskConnectionString |
Encrypted connection string for the FlexDisk Service (handles VHDX creation and management operations). |
DiskMode |
Disk format used for new ProfileDisk VHDs. Valid values: VHD,
VHDX. VHDX is recommended for all current Windows versions. |
LicenseMode |
Licensing model: NamedUser or ConcurrentUser, matching
the purchased license type. |
ProfileDiskConfigGroup |
Container for a single ProfileDisk group definition. Multiple groups may be present for different AD groups or disk locations. |
Assignments / Assignment |
The AD group (name = DOMAIN\Group, sid = group SID)
whose members receive this ProfileDisk configuration. |
MultiSession |
True allows the VHDX to be mounted concurrently across multiple
sessions (required for RDS/Citrix). False is safer for single-session
VDI and physical desktops. |
VirtualDiskCompression |
Whether NTFS compression is applied to the VHDX file itself.
Generally False; enabling compression can impact performance. |
VirtualDiskFormat |
Expandable (thin-provisioned, grows up to VirtualDiskSizeInGb)
or Fixed (full size allocated at creation). |
VirtualDiskPath |
UNC path to the per-user VHDX file. Supports %username% expansion.
Example: \\server\share\ProfileDisk\%username%\%username%_.vhdx
|
VirtualDiskSizeInGb |
Maximum size of the VHDX in gigabytes. For expandable disks this is the ceiling, not the initial allocation. |
Related Articles
- ProfileDisk Full User Profile Delivery (Product Docs)
- How to add VHD/x ProfileDisk to your current ProfileUnity setup
- How to enable ProfileDisk with Secondary Logon Disabled
- ProfileDisk not Mounting in Highly Secured Environments using CAC Authentication
- ProfileDisk does not mount on Server Operating Systems used as a desktop
- CAC Authentication Best Practices Guide (Product Docs)
- ProfileUnity Version Matrix
- ProfileUnity Hot Fix List