App-V 4.6: Important Consideration for Streaming from DP when Migrating from Configuration Manager 2007 to 2012

If you are currently using Configuration Manager 2007 to distribute your App-V applications through virtual application advertisements *and* you stream from the distribution points *and* you are about to migrate from Configuration Manager 2007 to Configuration Manager 2012 – you will need to be aware of a very important registry setting introduced last year: LaunchIfNotFound.

The value is found in the following location:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SoftGrid\4.5\ Client\Network\Http or
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\SoftGrid\4.5\ Client\Network\Http

Technically, what the value does is control the behavior of HTTP streaming when a connection to the HTTP server can be established and the package file no longer exists on the HTTP server. If the value does not exist or if it is not set to 1, the App-V client will not let you launch the application even if it is fully loaded into the cache. To prevent this from happening you would need to manually create this value and set it to 1 (it is a DWORD value.)  This behavior is no different from RTSP. File streaming will, however, launch the application – EVEN – if the value of RequireAuthorizationifCached is set to 1.

Configuration Manager Migration

Now that Config Manager 2012 has released and with SP1 on the horizon, many customers have begun the migration process or are in the process of migrating. So here is where it is important to be aware of this important configuration item. Let’s say you are in the process of migrating from Config Manager 2007 to 2012 and you configured your virtual application advertisements to stream from the distribution point. As part of the migration process, an administrator will likely move the App-V packages over to the Config Manager 2012 site (and/or a different distribution point) and then converts/upgrades some of their Config Manager DP’s hosting the virtual application packages and assigns them to the Config Manager 2012 site as DP’s.
Well, something interesting happens. The content on the distribution point will now be converted to the new Config Manager 2012 content format and the old Config Manager content structure and folders are changed.  During this time, the existing Config Manager Client systems could still be using Config Manager 2007 (as upgrading all clients may take a while in customer environments) and fail to launch – EVEN if fully cached. Another scenario would be even if the user is on the new client, the end user may be launching an existing application that was already on their system and was fully cached. Either way, the user could be stuck getting the following message when trying to launch an application:

The Application Virtualization Client could not launch <APPLICATION NAME>

The requested package does not exist on the server. Report the following error code to your System Administrator.

Error code: xxxxxx-xxxxxxxx-40000194

Why is this Happening?

Why are the launch failures failing even though the applications have been fully cached.  This occurs because when using HTTP streaming, the App-V client will perform an additional authentication check to confirm that the content folder is accessible. This is done even if the RequireAuthorizationIfCached setting was set to 0 on the client.

Similar issues can also occur when migrating from a traditional App-V management server infrastructure solution over to Config Manager 2012. Administrators would need to maintain dual content stores for HTTP streaming until all applications have been delivered via Config Manager 2012.
So, if you foresee yourself in these scenarios, it is advised to set the LaunchIfNotFound value to 1. This will require that you have at least HF3 for App-V 4.6 SP1 installed:

Also note that LaunchIfNotFound  can be set at the package level and in the network subkey for the entire client. If the key is found in both the package and network registry keys, then the value of per-package LaunchIfNotFound will overwrite the client-wide LaunchIfNotFound value.