Profiling Applications with VMware User Environment Manager, Part 2: Applying and Troubleshooting Predefined Settings
In Part 1 of this blog series, you were introduced to the VMware User Environment Manager Application Profiler. In Part 2 we will profile a popular video playback application called VLC Media Player, capture specific application settings, apply these as predefined settings when an end user launches the application, and explore troubleshooting techniques as needed. In Part 3 we use Google Chrome to demonstrate Application Profiler exclusions
Configuring a specific toolbar layout, setting a region-specific language, disabling automatic updates—these are just a few of many reasons IT might want to configure predefined application settings. Unfortunately, this is not always a simple task. Software vendors store configuration data in a variety of locations, and various packaging and deployment technologies have their own methods for customizing application settings.
VMware User Environment Manager provides an easy and consistent way to apply and enforce predefined settings for all your Windows applications. We will use the Application Profiler tool to capture these settings.
Installing Application Profiler and performing the initial profiling process is outside the scope of this blog post, and is well-documented in the VMware User Environment Manager Application Profiler Administration Guide. This blog post will focus on the advanced scenario of troubleshooting a profiled application.
The following describes the configuration used to profile VLC. For a comprehensive list of supported operating systems for Application Profiler, see the VMware User Environment Manager Application Profiler Administration Guide.
Application Packaging and Profiling Machine Configuration (Profiling VM)
The application packaging and profiling machine (also called the profiling VM) is configured with the following:
- Windows 10 Anniversary Update (AU) VM.
- VMware App Volumes Agent version 2.12.
- VMware User Environment Manager Application Profiler version 9.1.
- svc-profiler domain account has local administrative privileges.
The App Volumes Agent is an optional component, and is part of the VMware End-User-Computing JMP Solution. This agent is included so the same VM can be used to build an App Volumes AppStack for application deployment, and to profile the application for personalization with User Environment Manager. If you would like to learn more, or include App Volumes in your environment, refer to the App Volumes Reviewer’s Guide.
End-User Machine Configuration
The end-user machine in this example has the following configuration:
- Windows 10 AU
- VMware App Volumes Agent version 2.12.
- VMware User Environment Manager FlexEngine version 9.1.
- jspencer is a standard end user domain account.
VLC Media Player version 2.2.4 was captured to an App Volumes AppStack using all default installation options. The AppStack was then used to deliver VLC to the profiling VM. During the User Environment Manager application profiling process, the View > Playlist setting was selected for the default view.
Note: Playlist is the item being selected. Docked Playlist is a default setting, independent of Playlist.
Upon completion of the profiling process, we see that the configuration change was written to the file system, in the %AppData%\vlc folder.
Selecting Config File with Predefined Settings from Application Profiler produces four files:
- INI – User Environment Manager configuration file containing the import and export locations. This file defines the parameters for User Environment Manager to manage the application.
- ICO – Icon used by User Environment Manager Management Console and the Self-Support tool.
- FLAG – Flag file for FlexEngine, when DirectFlex is enabled (default).
- ZIP – Contains the predefined user settings.
I prefer to modify the Default Save Path so saved files are automatically added to User Environment Manager.
While you may be tempted to open and edit the ZIP file directly from Windows Explorer, it is critical that the Edit Profile Archive button be used instead. User Environment Manager uses the standard ZIP file format to prevent the creation of proprietary file formats, but the writes to and reads from the ZIP files are optimized for performance. Using tools outside of User Environment Manager to edit these ZIP files makes them unreadable by FlexEngine.
By editing the profile archive, we can browse the contents and make changes as needed.
Notice that VLC uses an INI file to record the user settings. When View > Playlist was selected during application profiling, playlist-visible=true was recorded in the INI. However, there are a number of additional settings that were automatically recorded in the INI.
When configuring predefined application settings, user settings that are stored in an INI file may result in different behavior than user settings stored in registry keys. We will come back to predefined settings later in this post.
For now, we are going to take a step back and run the application profiling process again for VLC. This time, View > Playlist is selected, and Tools > Preferences > Menus Language is configured for French.
Upon completion of the profiling process, we see that the configuration changes were written to the file system, in the %AppData%\vlc folder, and to the registry, in HKCU\Software\VideoLAN.
When we edit the profile archive this time, we see both AppData and Registry folders.
While it is not a common practice for application vendors, this version of VLC Media Player stores the language setting in the registry, while a variety of other user settings are stored in an INI file.
As mentioned in Part 1 of this series on the Application Profiler it is important to “know thine app.”
Configuring and Applying Predefined Settings
To configure and apply the predefined settings, we use the User Environment Manager Management Console.
The VMware User Environment Manager Administration Guide provides a detailed description of the four types of predefined settings you can choose from. For our purposes, we will configure VLC Media Player predefined settings to Partially Enforced Settings. Partially Enforced Settings are applied after the user profile archive has been imported. This effectively merges the user personal settings with the partially enforced settings. In case of a conflict, the partially enforced settings win and overwrite the user personal settings.
To test our configuration, I will log in to a View instant-clone desktop in as jspencer. The same App Volumes AppStack that was used to deliver VLC to the application-packaging VM is used to dynamically deliver VLC to the VM when I log in. When I launch VLC for the first time, the menus are in French, and the interface is configured for Playlist view. Success!
While logged in as jspencer, I will disable the Playlist view, change the language to American English, and clear all of the check boxes on this preferences page.
Based on the way the Partially Enforced Settings option is designed to behave, we would expect the following behavior the next time VLC is opened by jspencer:
- The menus will be in French and the Playlist view will be enabled. This is because both settings were configured during application profiling, and applied as partially enforced predefined settings.
- The check boxes cleared on the preferences page will remain cleared. This is because these settings are not specified by the predefined settings, and are therefore user settings that will be stored in the user-profile archive.
After closing and re-opening the application, we see that all of my changes were discarded, including the check boxes on the preferences page. This is not what we expected!
But why did this happen?
We are seeing the result of an application storing its user settings in an INI file. To understand this, let us look at the workflow when a user logs in to a Windows desktop with User Environment Manager enabled.
- User logs in.
- User profile archive, including any custom user settings, is imported to Windows.
- Predefined application settings are imported to Windows.
User Environment Manager behaves differently during Step 3 depending on whether the application settings are stored in the registry or in an INI file.
User Environment Manager can parse individual registry settings. You might think of this as merging only the specified, predefined registry keys to the Windows registry. In our test case, only the language setting is forced on the end user by the predefined application settings registry import. Any other user settings that happen to get recorded in HKCU\Software\VideoLAN are preserved for the end user. This enables IT to enforce specific application settings, while granting the end user flexibility to customize and preserve any other settings.
When applications store configuration data in files (INI,XML, or others), User Environment Manager can only overwrite the entire file. In our test case, the Playlist view predefined setting is stored in an INI file. That file is part of the predefined applications settings that are applied after the user profile archive is imported. The user jspencer made several changes (cleared check boxes) to the preferences page, which were stored in that same INI file. Going back to the previous workflow, the problem becomes apparent.
- User login.
- User profile archive, including the INI file customized per the user settings, is imported to Windows.
- Predefined application settings, including a copy of the INI file created during the application profiling process, overwrites the INI file imported in Step 2.
Another Issue with Text Files
Even though I am logged in to the end-user VM as jspencer, browsing to the VLC application settings INI shows a value that includes the user name (svc-profiler) of the account that was used during the application profiling process.
The intended behavior is for this line to be populated with the user name of the currently logged-in user—jspencer in this case.
User Environment Manager supports using placeholders to accommodate variables in text files.
Editing the profile archive allows us to modify the text file manually. In this case, I have replaced jspencer with the system variable %username%. See the User Environment Manager Administration Guide for proper syntax and usage.
Now when jspencer runs the application, the user name is properly reflected in the INI.
The following is a brief summary of the application profiling concepts and practices covered in this blog post, which you can apply to your own applications.
- Always use the Application Profiler or the User Environment Manager tools to edit a profile archive ZIP file.
- Applications might store user settings in the registry, in files, or both. Taking the time to fully understand the way your application behaves (“know thine app”) will ensure successful application profiling.
- When applications store user settings in an INI file, the intended behavior of partially enforced predefined settings might change.
- When applications store user settings in a file, values from the profiling VM or profiling user account might be preserved in the predefined application settings. Placeholders enable the use of system variables to address this possibility.
Many thnks to my colleague Josh Spencer for authoring the original article here.