In Application Virtualization and specifically Citrix Application Streaming, files get “populated” into the execution machine when they are “opened”.  Until they are opened, the isolation system LIES to the application to tell it the files are present, when they really aren’t there.

The same thing applies to Citrix Profile Management where the contents of %USERPROFILE% are not really populated onto the execution machine until something “opens” them.  Until that happens, the profile management system, with quite a bit of help from NTFS, LIES to say that the files are present.

There’s a bet – and a good one – that a bunch of the content of the streaming profile or the user profile, will NEVER be referenced.  Win the bet, things are faster.

You can see this happen, real-time if you launch streamed application with HKLM/Software/Citrix/Rade/EnableDebugConsole DWORD, set to 1.  Or, for easier vision, browse in Windows explorer to the RADECACHE\GUID_V\Device\C\… directory and watch the files show up as they are “accessed”.

Development side

In development, we often need to accurately control when cache fills happen so we can trigger pieces of code that need some exercise, with debuggers at the ready.   My most common tool for triggering a cache fill is starting any streamed application using the RadeRun -x switch which causes CMD.exe to get launched inside the sandbox right along side of the streamed application. Then using the elegant tool provided with the operating system “type” to trigger an open to the file.  It also triggers a “read”, but this comes later so can be ignored when all you really needed was an “open”.

IT Admin side

Occasionally, there are admin needs to control WHEN a cache fill occurs.

Good reasons too!  Which include:

  • Some file doesn’t seem to cache fill right and if it’s there, the app works, if not there, app fails.  I’ll pretend that this should NEVER be true, but reality of IT usage says it sometimes does occur.
  • Admin wants to pre-populate some massive file, or the entire profile/target, as a admin controlled timing.

There are more than one ways to accomplish.  There is a RadeRunSwitch (-e) to force populate of the entire profile as a pre-req activity to launching the application.  There are some serious problems with this approach though, the most egregious is that it does effectively an xcopy /s /e rather than a robocopy /mir.  You definitely don’t want this turned on for production.  Problem 2 is that -e is “global” to all profiles and admins want to force fill on a more precise basis.

Guidance

I have given advice to admins that they should, or can pre-fill under more precise control by writing a streaming pre-launch script or a logon script action for profile manager to force fill some key files.  The premise of this guidance is that the admin has a tool in their toolbox to cause an “open” to occur for the needed files.   History says that they don’t.

I mean they could use “type filename.ext  > nul:”, but this isn’t really clean for a 2GB file because it will really read, display and then bit bucket the entire 2GB.  A good head or tail utility would do it, but these too, not too clean.

Solution

I went looking for a good “touch” utility.  Well, there are a million good touch utilities on the internet.  What is needed is a touch utility tailored for application virtualization or really, all aspects of machine virtualization and running systems in a virtual world.

We need a utility that will “open” a file, without actually changing the file or it’s time stamps and this goes kinda counter to the traditional idea of a touch utility.  SPECIFICALLY, we need a tool that will open the file for “read access” rather than “write” and every touch utility I could find opens for write.  Notice that merely opening for write will “change” the file from the perspective of backup systems and also App Streaming.  The file would be promoted to the per-user space rather than the application image layer and if this happens, it didn’t accomplish what we really needed.

Couldn’t find one

Looked and looked, I couldn’t find a tool that met these needs, so I sat down on Monday night and wrote one while watching the Dolphins get crushed by New England.  Game sucked, so lots of time for writing code.

Here’s the download link for rtouch.exe.

The tool supports recursion, wildcards and optionally will open for read-access rather than the traditional write access.   Run with -? for full rundown of the usage.

Enjoy,

Joe Nord

Citrix Systems Product Architect

App Streaming, Profile Management