Portable Windows applications

Monday, November 30, 2009

A portable application does not leave its files or settings on the host computer. Typically this means that the application does not write to the Windows registry and instead stores its settings in one or more configuration files (e.g. an INI file) located in its directory. While some applications have options to support this behaviour, many programs are not designed to do this. A common technique for such programs is the use of a launcher program to copy necessary settings and files to the host computer when the application starts and move them back to the application's directory when it closes.

An alternative strategy for achieving application portability within Windows, without requiring application source code changes, is application virtualization: An application is "sequenced" or "packaged" against a runtime layer that transparently intercepts its file system and registry calls, then redirects these to other persistent storage without the application's knowledge. This approach leaves the application itself unchanged, yet portable.

The run-time layer can be embedded into an application on-the-fly by injecting a dynamic library into a third party process to create individual per application wrapper. The wrapper is activated at the application startup and hooks/redirects file- and registry-related system calls to operate with portable (ex: flash) storage space only.

The same approach is used for individual application components: run-time libraries, COM components or ActiveX, not only for the entire application. As a result, when individual components are ported in such manner they are able to be: integrated into original portable applications, repeatedly instantiated (virtually installed) with different configurations/settings on the same operating system (OS) without mutual conflicts. As the ported components do not affect the OS-protected related entities (registry and files), the components will not require administrative privileges for installation and management.

Microsoft saw the need for an application-specific registry for its Windows operating system as far back as 2005. It eventually incorporated some of this technology, using the techniques mentioned above, via its Application Compatibility Database using its Detours code library, into the XP version of Windows. It did not, however, make any of this technology available via one of its system APIs.

Portable software is a class of software that is suitable for use on portable drives such as a USB (thumb) drive or digital audio player or PDA with "drive mode", although any external hard drive can be used. The concept of carrying one's favored applications, utilities, and files on a portable drive for use on any computer is one which has evolved considerably in recent years.
Programs in this category (also known as portable applications) are typically 'lite' versions of their parent software, but there are many exceptions.

To be considered portable, for purpose of this list, a software program must:
Not require any kind of formal installation onto a computer's permanent storage device to be executed, and can be stored on a removable storage device such as USB flash drive, enabling it to be used on multiple computers.

Settings are stored with, and can be carried around with, the software (i.e., they are written to the USB drive). If the registry is used to store settings, the application's configuration isn't portable, and must be set up on every PC it is used on Leaves a zero (or near-zero) "footprint" on any PC it's run on after being used. i.e., All temporary files/registry settings should be removed once the program has exited, and files created by the user can be saved directly to the same removable media as the application is stored on.

Generally, smaller utility/toolkit software is inherently fairly portable; though larger applications are sometimes changed in order to allow a portable versions to be released (e.g., Opera@USB and OperaTor).

source: http://en.wikipedia.org/wiki/Portable_application