App-V File Streaming Primer

App-V 4.5 includes a great feature: file streaming. This is a super-easy, lightweight way to get an application published and loaded for use on an App-V client. There are no server or network pre-requisites required so it’s a very low overhead way to quickly get an application up and running.

When would you use file streaming? It’s ideal for any scenario when you don’t want a publishing or streaming server. For example, these situations come up when you’re testing a newly sequenced package, or fine-tuning the prescriptive guidance used; or you might be scoping a problem to be either a server-side issue or a client-side issue: if the problem still happens when you file-stream, the problem is client-side, otherwise it’s likely a networking or server-side issue.

To run through the steps needed to setup file streaming, we’ll keep the application generic and call it “SampleApp”. We assume that you’ve sequenced SampleApp using the App-V 4.5 Sequencer. No special steps are needed during the sequencing process. Here is the output from the Sequencer:

Package content

SampleApp Icons

3,371,757 SampleApp.sft

13,482 SampleApp.sprj

1,943 SampleApp_manifest.xml

2,060 SampleApp.osd

We won’t delve into the details, but let’s have a quick look at what each of these files contains.

SampleApp Icons

You’ll find the application icons in this directory, as they were captured by the Sequencer.


This is the file that has the installed content of the application. This includes all files, registry content, and metadata as the Sequencer classified it.


This is the project file for the Sequencer.


This is the manifest file. This file is an XML file with all the details of how the contents of the package should be published to the system. For example, if a shortcut should appear on the desktop and in the start menu, that information will be described in the manifest.


This is the file that describes the application.

Prerequisites for file streaming

Before we can file-stream, we have to make sure that the permissions are updated from the defaults. The permissions we need are the ability to add a package, and file stream it. We’ll also add permission to delete a package so we can clean up after we’re done.

We’ll set them directly in the registry, although the permissions for adding and deleting a package can be set in the MMC snapin, SFTCMC.MSC, that is installed with the App-V client. The permission to stream from a file can only be set during the installation of the client or in the registry. For simplicity, we’ll just set everything by editing the registry:






Now that the permissions have been set, we can get started. We now need to publish and load the applications, just like we do with any other App-V package.

Publishing the application

Let’s use the client command-line interface that is installed with the client: SFTMIME. Here’s the command-line we’ll use, assuming the package contents have been copied into c:\MySampleApp:

sftmime add package:SampleAppTest /manifest c:\MySampleApp\SampleApp_manifest.xml /overrideurl c:\MySampleApp\SampleApp.sft

Let’s examine the contents of this SFTMIME command:


This is an SFTMIME keyword called a verb. We use it here to specify that we’re adding, or publishing, a package to the App-V client.


This is an SFTMIME keyword. We use it here to specify we’ll be adding a package.


This is the name we have chosen for the name of our package. If we wanted a name with spaces we would just include it in quotes e.g. “Sample App Test”.


This is an SFTMIME keyword. It used here to specify the path to the manifest file for the package.


We provide the full path to the manifest file, including the filename. If the path had spaces, we’d use quotes e.g. “c:\my sample app\SampleApp_manifest.xml”.


This is the way we’ll use to specify the path to the SFT for this package. There are other ways of specifying the path to the SFT file which we won’t delve into in this post. By using overrideurl, the path to the SFT will be bound to the package publishing information on the client and we won’t have to make any further modifications nor specify it in other places. It should be noted that this value will override the ApplicationSourceRoot (ASR), or a publishing server, if either is configured on the client. This means that we can file-stream on a client that might be configured to receive other packages in another way.


This is the full path to the SFT file. As with the manifest file, this path can be enclosed in quotes if necessary.

We now run the command. If there are any errors, check SFTLOG.TXT for possible causes. When the command succeeds, if there were any shortcuts specified in the manifest, you should see them now.

But we should reiterate that this command only publishes the contents of the package. It does not load the contents of the package into the App-V client cache. Before the application(s) in the package can run, they must be loaded into the App-V client package cache. There are several ways this can be done:

1. Launch an application in the package. This will cause the App-V client to load the contents of the SFT file into the App-V client cache. This operation only happens the first time the application is launched.

2. Use SFTMIME to explicitly load the package.

3. Use SFTTRAY to explicitly load the package.

The advantage of pre-loading the package contents is you won’t have to wait any time when you launch the application. Since it will be pre-loaded into the cache, it will be ready to run.

To pre-load using SFTMIME, use the following command line:

sftmime load package:SampleAppTest


This is another SFTMIME keyword called a verb. We use it here to specify that we’re loading a package to the App-V client.


This is an SFTMIME keyword. We use it here to qualify the name we will provide.


This is the name of the package we used when we published the package on the client. These two must match.

This command will block until all the contents of the package have been loaded. If the package content is large, this might take a bit of time. You can monitor the progress by refreshing the applications view in the MMC snapin.

Another way to pre-load the package is to use SFTTRAY, which is also run from the command-line, just like SFTMIME:

sfttray /load SampleAppTestName


Just as with SFTMIME this switch tells SFTTRAY that we want to load a package.


This needs to be the name of an application in the package. Note that this is not the package name. To get the name of an application you can use SFTMIME: sftmime query obj:app /short. If the application name has spaces, include it in quotes.

The nice thing about SFTTRAY is that you will get a progress indicator in the notification area of your desktop. The progress indicator will count up to 100% of the entire package. This is different from a package launch where you reach 100% when just FB1 has been loaded.

As you’ve seen, using file streaming is very easy. The only requirements are managing the permissions and publishing the package. We used SFTMIME to publish the package. The package will load when launched. We showed two ways to explicitly load it: by using SFTMIME, and by using SFTTRAY.

When you are done with the package you can delete it via the App-V client MMC snapin.


-Matthijs Gates, Senior Program Manager, Microsoft App-V Team

Comments (4)

  1. Anonymous says:

    Feed: The App-V Blog Posted on: Monday, February 23, 2009 5:45 PM Author: Andrew Montgomery Subject:

  2. Marc Trotter @ AllianceBernstein says:

    Was having a lot of trouble with SFTMIME adding and loading packages from a network share when the path contained spaces.  This was my solution:

    Set PACKAGE_NAME=vWorkspace7.5

    Set PACKAGE_MANIFEST=vWorkspace7.5.304.547_manifest.xml

    Set SFT_FILE=vWorkspace7.5.304.547.sft

    REM ———————————————————-

    Set SERVER_PATH=\ac03wpd1001prodswapp-v

    Set ROOT_FOLDER=%~dp0





    for /F "delims=" %%I in ('echo %FOLDERNAME%') do (

       Set PACKAGE_PATH3=%%~sI


    if /i "%PROCESSOR_ARCHITECTURE%" equ "x86" (

       reg.exe add "HKEY_LOCAL_MACHINESOFTWAREMicrosoftSoftGrid4.5ClientConfiguration" /v ApplicationSourceRoot /d "%SOURCE_ROOT%" /t REG_SZ /f

       reg.exe add "HKEY_LOCAL_MACHINESOFTWAREMicrosoftSoftGrid4.5ClientConfiguration" /v IconSourceRoot /d "%PACKAGE_PATH1%" /t REG_SZ /f

       reg.exe add "HKEY_LOCAL_MACHINESOFTWAREMicrosoftSoftGrid4.5ClientConfiguration" /v OSDSourceRoot /d "%PACKAGE_PATH1%" /t REG_SZ /f

       reg.exe add "HKEY_LOCAL_MACHINESOFTWAREMicrosoftSoftGrid4.5ClientConfiguration" /v RequireAuthorizationIfCached /d 0 /t REG_DWORD /f

       reg.exe add "HKEY_LOCAL_MACHINESOFTWAREMicrosoftSoftGrid4.5ClientConfiguration" /v AllowIndependentFileStreaming /d 1 /t REG_DWORD /f

       ) else (

       reg.exe add "HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftSoftGrid4.5ClientConfiguration" /v ApplicationSourceRoot /d "%SOURCE_ROOT%" /t REG_SZ /f

       reg.exe add "HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftSoftGrid4.5ClientConfiguration" /v IconSourceRoot /d "%PACKAGE_PATH1%" /t REG_SZ /f

       reg.exe add "HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftSoftGrid4.5ClientConfiguration" /v OSDSourceRoot /d "%PACKAGE_PATH1%" /t REG_SZ /f

       reg.exe add "HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftSoftGrid4.5ClientConfiguration" /v RequireAuthorizationIfCached /d 0 /t REG_DWORD /f

       reg.exe add "HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftSoftGrid4.5ClientConfiguration" /v AllowIndependentFileStreaming /d 1 /t REG_DWORD /f




    sftmime.exe add package:"%PACKAGE_NAME%" /manifest "%PACKAGE_PATH3%\%PACKAGE_MANIFEST%" /overrideurl="%PACKAGE_PATH3%\%SFT_FILE%" /global

    sftmime.exe load package:"%PACKAGE_NAME%" /sftpath "%PACKAGE_PATH3%\%SFT_FILE%"

    gpupdate /force

Skip to main content