Application Virtualization & Application Streaming

Application virtualization is an umbrella term that describes software technologies that improve portability, manageability and compatibility of applications by encapsulating them from the underlying operating system on which they are executed. A fully virtualized application is not installed in the traditional sense, although it is still executed as if it were. The application is fooled at runtime into believing that it is directly interfacing with the original operating system and all the resources managed by it, when in reality it is not. In this context, the term "virtualization" refers to the artifact being encapsulated (application), which is quite different to its meaning in hardware virtualization, where it refers to the artifact being abstracted (physical hardware)

The basic concept of Application Streaming has its foundation in the way modern computer programming languages and operating systems produce and run application code. Only specific parts of a computer program need to be available at any instance for the end user to perform a particular function. This means that a program need not be fully installed on a client computer, but parts of it can be delivered over the network as and when they are required.

ref:



MSDN Webcast: Application Virtualization And Software Streaming Within Systems Management Server (Level 200) - http://www.techrepublic.com/whitepapers/msdn-webcast-application-virtualization-and-software-streaming-within-systems-management-server-level-200/355156



Application Virtualization with Microsoft Dynamics NAV 2009 R2 - http://msdn.microsoft.com/en-us/library/gg670186.aspx

CLR Hosting in Native Applications

Developing a large application in native C++ and want to extend this app so they can mold it to their needs. Allowing to write the extensions in managed code inside the Microsoft® .NET Framework would make their development experiences much smoother than if they had to work with native code.

For applications that were written by using the .NET Framework, hosting the common language runtime is completely transparent. If you compile your managed code as an .exe assembly, the runtime is started automatically by mscoree.dll when the .exe is run. However, unmanaged applications can also benefit from hosting the common language runtime. Whether it is invoked automatically, as with managed .exe assemblies, or loaded by using the unmanaged hosting API, a .NET Framework application requires a piece of code called a runtime host. The runtime host loads the runtime into a process, creates application domains within the process, and loads and executes user code within those application domains.

Selecting CLR Version From Unmanaged Host:

Question: What is the correct way determine what framework version is installed on a computer to choose the correct CLR hosting approach(I would like my code to work in CLR 2.0+ environment) ?

Answer:
  1. LoadLibrary mscoree
  2. GetProcAddress for CLRCreateInstance. If you get NULL, fall back to legacy path (CorBindToRuntimeEx)
  3. Call CLRCreateInstance to get ICLRMetaHost. If you get E_NOTIMPL, fall back to legacy path (same as above)
  4. Otherwise, bank on the ICLRMetaHost you just got

ref:



CLR memory management - http://community.bartdesmet.net/blogs/bart/archive/2005/07/24/2984.aspx