App Layering – App Layers, Image Templates, and Publishing

Last Modified: Sep 27, 2023 @ 7:22 pm

Navigation

Change Log

Create App Layer

Note: Citrix App Layering does not isolate applications. If you need isolation (e.g. multiple versions of Java), consider implementing Microsoft App-V. Citrix App Layering merges the layers without isolation.

  1. See Citrix CTX225952 4.x Layering Best Practices
  2. In the ELM Management Console, go to the Layers tab or node.
  3. In the App Layers tab, click the Create App Layer button. Or in the Silverlight interface, right-click in the grey, and click Create App Layer.

  4. In the Layer Details page, give the layer a name and version. Since the App Layer is tied to the OS Layer, it’s a good idea to include the OS Layer name in the App Layer name.
  5. Give the layer a Max Size. If Offload Compositing is not enabled then the layer disk created for the vSphere Packaging Machine is Thick Provisioned. Scroll down or click the down arrow.

  6. In the OS Layer section, select an OS Layer and version. An App Layer created for one OS Layer cannot be used with another OS Layer. Scroll down or click the down arrow.

  7. In the Prerequisite Layers section, you can select additional dependent App Layers to include in your packaging machine. If there are no dependent layers, just scroll down or click the down arrow.

  8. In Silverlight, in the Connector page, select a vSphere connector, and click the down arrow.
  9. In the Platform Layer section, if you are creating the App Layer on a different hypervisor than originally used for the OS Layer, you can select the Platform Layer for the new hypervisor. If the hypervisor has not changed, just scroll down or click the down arrow. The hypervisor can also be changed when publishing the Image Template later.

  10. In the HTML5 interface, select a Connector, enter a filename for the .vmdk file, and click Confirm and Complete.

    1. In the Silverlight interface, in the Packaging Disk page, give the .vmdk file a name, and click the down arrow.
    2. In the Icon Assignment page, select an icon, or upload a new one, and click the down arrow.
    3. In the Confirm and Complete page, click Create Layer.
  11. Go to the Tasks page. Or in Silverlight, at the bottom of the page, open the Tasks panel.
  12. Click View Details for the running task. Or in Silverlight, click the information icon next to the running task.

  13. Eventually the task will finish deploying the Packaging Machine and say Action Required.

  14. In vSphere Web Client, find the new Packaging Machine (in the PackagingVMs folder in the Layering VM folder), open its console, and install your app normally.
  15. See App layer recipes at Citrix Docs for some application install instructions.
  16. Citrix CTX226984 App Layering/Unidesk: The list of Windows Updates is usually wrong in app/platform layers and published images/desktops.
  17. Antivirus can be installed on an App layer. See Deploy anti-virus software at Citrix Docs for instructions for the following:
    • Symantec
    • McAfee
    • Trend Micro
    • Sophos
    • AVG
    • Kaspersky
  18. User settings are not captured in an Application Layer.
  19. Domain Join – CTX224668 How to install applications that require joining the domain with Citrix App Layering – In summary, you can join a layer to the domain while packaging, but you must remove it from that domain before finalization.
  20. For Office, put all Office apps in one layer.
    • Print to OneNote does not work in Elastic Layers.
  21. For Office 365 Click-to-run activation:
    1. After Office Click-to-run is installed, for all OSs other than Windows 7, run C:\Windows\Setup\scripts\Office2013Windows81_PREP.cmd as Administrator.
    2. In App Layering 4.6, Optimize.hta and Office Activate.cmd can handle Office 365 Click-to-run activation. For 4.5 and older, see Rob Zylowski at Office Activation Scripts for Office 365 at Citrix Discussions, to download these scripts . Also see O365 Office 2016 click to run online activation at Citrix Discussions.
    3. Go to C:\Windows\Setup\Scripts, right-click RunOptimizer.cmd, and click Run as administrator.
    4. Scroll down to J, check the box next to Process Office 365, and click Save Settings A-K.
    5. This creates a file called ProcessOffice365.txt.
    6. See Citrix CTX224566 Unidesk Recipe for Office 2016: Using Shared Computer Activation From Office 365 for more licensing guidance.
  22. For Office Volume License activation: (Source = Citrix CTX224900 Windows / Office 2016 KMS not activating in App Layering images (MCS Image Prep OS Rearm Failed)
    1. Go to C:\Windows\Setup\Scripts, right-click RunOptimizer.cmd, and click Run as administrator.
    2. Configure item H.
    3. Scroll down a little bit and click the button labelled Save Settings A-K. Then click the Optimizer.


    4. For all OSs other than Windows 7, run C:\Windows\Setup\scripts\Office2013Windows81_PREP.cmd as Administrator.
    5. Then rearm Office by running C:\Program Files\Microsoft Office\Office16\OSPPREAM.exe as administrator.
  23. When you are done installing your app, finalize the layer:
    1. George Spiers Citrix App Layering Preparation Script: runs a number of tasks to clean out temporary folders, clear out Event Log entries, remove ghost devices from Device Manager, etc.  ?
    2. Double-click the Shutdown for Finalize icon on the desktop. If it finds issues, it will tell you what to do (e.g. reboot needed). Otherwise, it will shut down the VM.
  24. If Offload Compositing is enabled in your Connector, then upload will happen automatically.
    1. Otherwise, after the machine is shutdown, in ELM Management Console, go to Layers > App Layers.
    2. Right-click the Layer that is currently being Edited, and click Finalize.
    3. In the Script Path page, if you embedded any scripts in the layer, specify the path. Otherwise, just click the down arrow.
    4. In the Confirm and Complete page, click Finalize.
  25. It will eventually finish and say Deployable.

  26. You can Edit Properties on your App Layer to change the icon or specify a Script Path.

Windows Updates – From Gunther Anderson: “Generally, the list of updates is unreliable anywhere except the layer where the updates were installed. If your OS layer says the updates were installed, then they were. The actual list (the list is not the same as the actual updates) tends to get stepped on by your other app layers, since they remember the updates list from when they were originally created. With all of your app layers trying to set their own personal misunderstanding based on when they were initially created, what winds up in the published image is not a good reflection of any reality. However, the information from the OS layer is correct. Likewise, the list of Office updates shown in the Office layer is correct even when the list of Windows updates shown in the Office layer is not.”

User Layer Repair – App Layering 1908 and newer create User Layer Repair files for any new or edited App Layer. Uses these files to repair User Layers so that the App Layer you just created or edited overrides the User Layer.

Citrix has a User Layer Management Utility that does more than just repair. It can also Reset (rename) user layers, Compress them, or Expand them. This tool also works with FSLogix disks.

To repair user layers without using a utility:

  1. Find the repair files in your file share under \Unidesk\Layers\App\Repair and \Unidesk\Layers\App\PackageAppRules.
  2. Copy the UserLayerRepair.json file for the App Layer to the user’s User Layer .vhd location.
  3. Make sure Domain Computers has Modify access to the user’s VHD location. The repair function runs as the computer, not the user.
  4. After logging into a published machine, C:\Programdata\Unidesk\Logs\ulayersvc.log shows the Repair status.

OS Layer Switching – if you enabled the OS Layer Switching Lab Feature, then do the following:

  1. Edit Properties on the App Layer.

  2. In the App Layer Settings section (Layer Details page) is a checkbox to Allow this App Layer to be elastically assigned to all Layered images, regardless of OS layer (Allow OS Layering Switching). You’ll need to repeat this for each additional App Layer. Source = Elastic layers to other OS layers not working as expected at Citrix Discussions.

Image/Template

  1. In the ELM Management Console, go to the Images node/tab, and click Create Template.
  2. In the Name and Description page, give the Template a Name that indicates the OS Layer, Platform Layer, and App Layers. Then scroll down or click the down arrow.
  3. In the OS Layer section, select an OS Layer, and scroll down or click the down arrow.
  4. In the App Layers section (Application Assignment page), click Edit Selection and select zero or more applications. Any App Layer you select here will be merged into the machine pre-boot. Elastic Layers are assigned later. Click the down arrow.

  5. In HTML5, in the Platform Layer section, select a Platform Layer and version. If you are pushing to PVS, then make sure the Platform Layer includes the PVS Target Device Software. Scroll down.
  6. In HTML5, in the Connector section, select an existing Connector. In the HTML5 interface, in App Layering 2202 or newer, use the Connectors page in the HTML5 interface to add a Provisioning Services connector. Or use the Internet Explorer Silverlight interface at System > Connectors. See below for some configuration info for this type of Connector.
  7. In the Layered Image Disk page, give the .vmdk file a name, specify a size, and decide if you want Sysprep to run or not. You typically don’t need to Sysprep the image if you’re using MCS, PVS, Composer, or Instant Clone.
  8. App Layering 2308 and newer have an option to Defragment Layered Image Disk.
  9. If you wish to enable Elastic Layering, select it here to enable it in the Image Template. Assignment of Elastic Layers to users is described later. Notes:

    • Disk Free Space – when you enable Elastic Layering, the published image only gets 20 GB of free space due to the addition of a writable partition. To change the size, see CTX225030 How to set the default size of the Elastic Layering writable volume. You edit /usr/local/CAMService/CAMService.exe.config and add the line <add key="ScratchVolumeSizeInMB" value="20480"/>
    • Login time delay – From Rob Zylowski at XenApp Image Template Application Assignment vs Elastic Delay at Citrix Discussions: “There is a 5-8 second penalty just for turning on elastic layering. But its not a straight x seconds per app because the mounts run in parallel. However more apps do take longer. What can have more of an effect is if the app has a service. We have to mount the disk, read it and then start the service before we allow the logon to ensure that the service is available if your logon actually needs it. There is a log at c:\programdata\unidesk\logs that will tell you the time associated with mounting and starting elastic layers so you will know how much of the logon impact is due to elastic layering.”
    • Elastic Layers Path Override – The path to Elastic Layers can be overridden by setting HKEY_LOCAL_MACHINE\SOFTWARE\Unidesk\ULayer:RepositoryPath on the published machine. See CTX222107 You can change the Elastic Layer repository in the registry without reimaging (4.x).
    • Citrix Profile Streaming Compatibility – App Layering 4.12 and newer support Citrix Profile Management Profile Streaming with Elastic Layers. Also see Elastic Layers and Profile issues at Citrix Discussions.
    • Delayed loading – By default, Elastically Assigned Layers are loaded at the end of the login process so that the user can get to a desktop quickly and not have to wait for their Elastic Layers to surface first. However, especially with Session Hosts, you may find that the Elastic Layers are not available quickly enough. It is possible to make Elastically Assigned Layers attach at the beginning of the login process. by setting HKLM\SOFTWARE\Unidesk\ULayer\MaxCompositingPhase = 0. More info at CTX246468 How to disable delayed loading of Elastic Layers on an image.
  10. User Layers is another option. Notes:

    1. User Layers have the same application compatibility limitations as Elastic Layers.
    2. Storage Locations for User Layers are configured at System > Storage Locations.
      • In App Layering 2005 and newer, you can set a custom path by creating a REG_SZ value called CustomUserLayerPath in the HKLM\Software\Unidesk\Ulayer key. See How to specify a custom user layer path at Citrix Docs.
    3. The default size for User Layers is 10 GB. You can change this size by setting HKLM\Software\Unidesk\Ulayer\DefaultUserLayerSizeInGb on the managed machines. Source = Understanding Elastic Layering > Scaling (tab) > User Layer Size.
    4. Multiple access to the User Layer VHD is not allowed.
    5. After logging into a published, layered machine and mounting a user layer, you must revert the machine. Non-persistent Catalogs automatically revert the machine after logoff. Or take a snapshot before logging in and revert to snapshot after logging out.
    6. David Wilkinson describes User Layers in detail at Citrix Application Layering – User layers.
  11. Office 365 User Layers is a fully supported feature. For details (including limitations), see:

  12. Session Office 365 User Layers can roam Outlook OST files on RDSH VDAs.

  13. Scroll down or click the down arrow and then click the Confirm and Complete button or Create Template button.
  14. The Image is then displayed as Publishable.

Clone Template

There’s a Clone Template feature to more easily create multiple templates with similar configurations.

  1. On the Images tab, select an existing Image Template and click the Clone button.
  2. Right-click the newly created template and click Edit.
  3. Notice the name has – Copy on the end. Feel free to change the name and edit the new template as desired.

Publish Image

  1. Select a publishable image template and click Publish Layered Image.
  2. In the Confirm and Complete page, click Publish Layered Image.
  3. Open the Tasks pane and click View Details (the information icon) to view details of the running task.
  4. If publishing to MCS (vSphere):
    1. In the vSphere Web Client, you’ll find the Template VM under the TemplateVMs folder under the Virtual Machine folder you selected for the Connector.
    2. Citrix MCS creates VMs in the same Folder as the Master Image. You might want to move the Template VM to a different virtual machine folder.
    3. For MCS, in Citrix Studio, create a Machine Catalog using the Template VM as the Master Image.

    4. Notice that MCS creates VMs in the same Virtual Machine folder as the Master Image.
  5. If publishing to Provisioning Services (PVS):
    1. The image is uploaded to the vDisk Store as a .VHD file (not .VHDX).
    2. And it’s automatically added to the vDisk Store in the PVS Console. You can now assign it to your Target Devices.
    3. You can Redirect ulayersvc.log to another folder or drive by modifying C:\Program Files\Unidesk\Layering Services\ULayer.exe.config. You can only modify this file after the image is published. (Source =CTX237138 Redirect ulayersvc.log to another folder or drive)
    4. CTX226065 Citrix App Layering 4.x: PVS Image Management – choose an image, then list all the targets using that image optionally filtering on one ore more collections, then “promote” the image to all selected targets.
    5. If the PVS Image prompts for a reboot, then see CTX230767 App Layering: Published image to PVS prompts user to restart computer. Create a new Platform Layer version. Take an existing Write Cache disk and attach to the Packaging VM so it can detect the new hardware. Remove the second disk and Finalize the Layer.

Elastic Layers

Logon delay – From Rob Zylowski at XenApp Image Template Application Assignment vs Elastic Delay at Citrix Discussions: “There is a 5-8 second penalty just for turning on elastic layering. But its not a straight x seconds per app because the mounts run in parallel. However more apps do take longer. What can have more of an effect is if the app has a service. We have to mount the disk, read it and then start the service before we allow the logon to ensure that the service is available if your logon actually needs it. There is a log at c:\programdata\unidesk\logs that will tell you the time associated with mounting and starting elastic layers so you will know how much of the logon impact is due to elastic layering.”

Citrix.com Understanding Elastic Layering – A technical overview of the Citrix App Layering 4.x Elastic Layering Architecture and Configuration details

Provisioning Cache Disks – Citrix CTX227454 App Layering: PVS Cache Disks May Need to Be Larger with Elastic Layering: you may need to add capacity to your Cache Disks and/or Cache Memory reservation on your Target Machines to support App Layering with Elastic Layers. App Layering caches entire modified files, not individual modified blocks.

Profile Streaming Compatibility – App Layering 4.12 adds support for Citrix Profile Management Profile Streaming with Elastic Layers. Also see Elastic Layers and Profile issues at Citrix Discussions.

Delayed loading – By default, Elastically Assigned Layers are loaded at the end of the login process so that the user can get to a desktop quickly and not have to wait for their Elastic Layers to surface first. However, especially with Session Hosts, you may find that the Elastic Layers are not available quickly enough. It is possible to make Elastically Assigned Layers attach at the beginning of the login process. by setting HKLM\SOFTWARE\Unidesk\ULayer\MaxCompositingPhase = 0. More info at CTX246468 How to disable delayed loading of Elastic Layers on an image. 💡

To assign elastic layers to users:

  1. In HTML5, select an App Layer and switch to the Version Information tab. Select a version and click Update Assignments.

    1. In Silverlight, go to Layers > App Layers. Right-click a Deployable App Layer, and click Add Assignments.
    2. In the Select Version page, select an App Layer version, and click the down arrow.
    3. In the Image Template Assignment page, don’t select anything. This page lets you assign this App Layer to a Image Template for pre-boot merging. For Elastic merging/mounting, just click the down arrow.
    4. In the Elastic Assignment page, note any issues that Elastic Fit discovered that would prevent the app from merging elastically correctly. If you’re OK with the issues, click the Assign Elastically button.
  2. In HTML5, switch to the Elastic Assignments tab and click Assign to new users.
  3. Search for a user group you want to assign this Layer to, and check the box next to the group. Click Save when done. Or click the down arrow when done.

  4. Click Confirm and Complete. Or in Silverlight’s Confirm and Complete page, click Assign Layer.

  5. Open the Tasks pane to see the progress while it copies the App Layer to the remote SMB share.

  6. When it’s done, go to the SMB share to see the files it uploaded, including the .json files that contain Layer assignments.
  7. To enable Elastic Layers in machines created from a ELM Image Template, edit the Template (Images), and make sure Elastic Layers is enabled in the Layered Image Disk page.

  8. Note: when you enable Elastic Layering, the published image only gets 20 GB of free space due to the addition of a writable partition. HTML5 lets you edit the size of this writable partition.

  9. If you find that App Layers are conflicting with each other, you can adjust the App Layer priority by using the Unidesk 4 Layer Priority Utility — Experimental tool.
  10. From Citrix Discussions Application from an Elastic Layer as “Published App”? You can publish an elastic app. Simply publish an app, but manually specify the path to where executable would be. The app is mounted before the user logs in, so it will be there when Citrix tries to launch the app.
  11. The path to Elastic Layers can be overridden by setting HKEY_LOCAL_MACHINE\SOFTWARE\Unidesk\ULayer:RepositoryPath on the published machine. See CTX222107 You can change the Elastic Layer repository in the registry without reimaging (4.x).
  12. To debug Elastic Layers, see CTX222133 Elastic Layering Logs. Only Info logging is enabled by default.
    1. In C:\Program Files\Unidesk\Layering Services\ulayer.exe.config, set LogFileAppender level to Debug
      1. Must be set before machine boots.
    2. C:\ProgramData\Unidesk\Logs\ulayersvc.log

Update Layers

  1. You can optionally select an existing App Layer and click Clone. You would do this if want to create a new branch of app updates without affecting the main branch.

    1. You can select a particular version of the source layer.

    2. It takes a bit of time to clone the layer. Use the Task status panel to see when it’s done.

  2. In the HTML5 interface, select an App Layer, switch to the Version Information page, and then click Add Version. In Silverlight, right-click an App Layer and click Add Version.

  3. In the Version Details page, enter a new version, and scroll down or click the down arrow.

  4. In the OS Layer page, click the down arrow.
  5. In the Prerequisites Layers page, click the down arrow.
  6. In the Connector page, select a Connector, and click Confirm and Complete, or click the down arrow.

  7. In the Platform Layer page, click the down arrow.
  8. In the Packaging Disk page, click the down arrow.
  9. In the Confirm and Complete page, click Add Version.
  10. The task details shows the current progress.
  11. It eventually says Action Required.
  12. When the Packaging Machine is deployed, you can connect to its console and perform any desired updates. When you are done performing updates, finalize the layer:
    1. George Spiers Citrix App Layering Preparation Script: runs a number of tasks to clean out temporary folders, clear out Event Log entries, remove ghost devices from Device Manager, etc.  ?
    2. Double-click the Shutdown for Finalize icon on the desktop. If it finds issues, it will tell you what to do (e.g. reboot needed). Otherwise, it will shut down the VM.
  13. If Offload Compositing is enabled, then upload happens automatically.
    1. Otherwise, when done updating the Packaging Machine, right-click the App Layer that is marked as Editing, and click Finalize.
    2. In the Script Path page, click the down arrow.
    3. In the Confirm and Complete page, click Finalize.
  14. View the task details to see the current progress.

  15. To confirm that you have a new version, in HTML5 interface, select the App Layering and switch to the Version Information tab. In Silverlight, right-click the App Layer, and click Delete Versions.

  16. You can only delete versions that are not assigned to any Image.

  17. There are two methods of assigning a new version: one image at a time, or multiple images.
  18. To edit one image:
    1. Go to the Images tab. Select an Image, and click Edit Template.

    2. In HTML5 interface, scroll down to the App Layers section and click Edit Selection. Select the new version and click Save. Then click Confirm and Complete.

      1. In Silverlight, click the Application Assignment page. Click the plus arrow next to a Layer and select the new version. Then complete the wizard.
  19. To update multiple images:
    1. In HTML5, in the Version Information tab for a Layer, select the version and click Update Assignments.

      1. In Silverlight, right-click the updated layer, and click Update Assignments.
      2. In the Select Version page, select the version you want to assign, and click the down arrow.
    2. In the Image Template Assignment tab, select the templates you want to update, and scroll down or click the down arrow.

    3. In the Elastic Assignment tab, if this App Layer is assigned to users, you can update them too. Click the down arrow.

    4. Click Confirm and Complete, or in the Confirm and Complete page, click Update Assignments.

  20. Once an image has a new version assigned, you must republish it.

Export Layers

App Layering 4.3 and newer let you export all layers and versions to the SMB File Share.

  1. Go to the Layers tab.
  2. Right-click on the background, and click Export.
  3. App Layering 4.4 and newer lets you specify a file share for the exported layers.
  4. ELM 4.5 and newer let you select the layers and versions that you want to export. Make your selections, and then click the down arrow.
  5. Review the list of layers/versions it will export, and click Export.
  6. If you look in your SMB share, in the \Unidesk\Exported Layers folder, you’ll see a folder for the OS Layer, and in there, you’ll see a folder for each Platform and Application Layer.
  7. After creating new layer versions, if you export layers again, it will only export the layers/versions that haven’t already been exported.
  8. If you right-click the background, and click Import
  9. It only imports the layers/versions that are missing.

126 thoughts on “App Layering – App Layers, Image Templates, and Publishing”

  1. I need some help with an issue. I have an OS layer setup. Windows 2022. I have a platform layer that is setup via the OS layer.

    When i try to make an App Layer, i get this issue.

    no platform layers found for os layer

    What did i miss?

Leave a Reply

Your email address will not be published. Required fields are marked *