...software technology that encapsulates computer programs from the underlying operating system on which it is executed. A fully virtualized application is not installed in the traditional sense, although it is still executed as if it were. ...behaves at runtime like it is directly interfacing with the original operating system... ...but can be isolated or sandboxed..."
The difference between hardware virtualizationHardware virtualization is the creation of virtual (as opposed to a physical one) versions of computers and operating systems. solutions, such as VMware Workstation or Virtual PC, and application virtualization is that in the latter case the operating system, the host PC, is executing the program. However, you could say that Windows Vista supports application virtualization as well considering it can virtualize folder structures and the registry for legacy applications. So the virtualization solutions differ only with respect to the objects they virtualize. Some solutions will virtualize a full-blown computer while others may only touch upon a program's folder.
There are two different ways in which an application can be virtualized: the packager compares the snapshots taken before and after the installation, or the packager intercepts all operations of the original installation program. The latter is more reliable in the since that the differences between the PC used to virtualize the program and the target machine are much less important.
Installing an application can be prone to errors. The more applications you install on a desktop, the more bloated its registry and system folder can get. Thus, making the computer slower and increases the chance of failures. Application virtualization leaves the registry and system folders untouched. Sometimes installing an application can corrupt another application which makes virtualization a nice answer in reducing the risk of application conflicts. You can also deploy runtime environments together with the application. This enables you to run different versions of a runtime environment on a host PC. For example, you can run different Java versions simultaneously without messing around with environment variables. Virtualizing is also often OS independent. Legacy applications that wouldn’t work on a 64 bit might run without problems on Vista x64 in a virtual environment. Together with Wine and Crossover, you can also run complex Windows applications on Linux and OS X. Lastly, the end user requires minimal privileges: Legacy applications that require administrative rights usually work in environments where end users only have standard rights.
Most solutions usually pack the entire virtualized application in just one large executable. While this can simplify deployment of the virtualized application in some environments, the resulting file size can be massive (sometimes in excess of 1GB or more). There's many factors to take into consideration like shell integration, system drivers, and in most cases you won't get any support from a vendor if they know the product has been virtualized. Some packagers are better about this than others. Of course, various application virtualization solutions also differ in the way they deal with the aforementioned disadvantages.
Baltagy, who specializes in virtualizing applications, has informed me that another huge disadvantage to virtualizing applications is you cannot use Windows Services when trying to make an application portable. This is because once the virtualized application is launched on a machine and exited, that service(s) is left behind on the host machine. This is why he won't make a virtualized version of an application that uses a service. This will ultimately limit you on what applications you can make portable with virtualizing if you care about quility like he does.. Thank you Baltagy.