One of the benefits of a third-party add-on product to Terminal Services such as Citrix MetaFrame Presentation Server is published applications with seamless windows. In fact the default setting for MPS 3.0 is to only allow users to access remote servers via published applications.
How does seamless windows work?
Applications with seamless windows require components on the server side as well as the client side. Modern versions of the Win32 ICA clients have the seamless components built into the core client engine (wfica32.exe). On the server side the bulk of the seamless engine resides in an executable called wfshell.exe (although it also depends in part on ctxnotify.dll and semain20.dll).
The server side and client side components communicate with each other via a virtual channel used exclusively for seamless windows data communication. This virtual channel is used for window events (sizing, location, etc.), for starting additional published applications, and so on.
Launching published applications
Client printer autocreation
Session virtual channels
SpeedScreen / SpeedScreen Browser Acceleration
and read every time WFShell is launched. (i.e they’re read every time a new session starts.)
When establishing a connection to a seamless application, the ICA client sends information about its desktop to the server. This information includes things like client metrics, display area, color depth, etc. The server needs this information so that it can (for example) know when you move a window out of the visible range.
Understanding Session Sharing
To launch the second application, the ICA client engine sends the request to the server via the seamless windows virtual channel and the WFShell (ctxnotify) starts the application on the server within the same client session. If needed, session sharing can be disabled by setting an exception flag (more on exception flags below). You can also check out this Citrix knowledgebase article that fully explains session sharing CTX159159.
Since both seamless applications share the same ICA connection, session sharing is only possible when:
The second application has been published on the server where the first application’s session is running
The second application’s color depth is equal to or lower than the first application’s color depth. (See “There is no Session-Sharing if Subsequent Sessions Have Higher Depths” CTX127702 for more details.)
The second application’s sound quality is equal or lower then the first seamless application’s.
The second application’s encryption level is the same as the first application.
Using Seamless Exception Flags to alter Application behavior
Citrix had to implement a lot of "tricks" to get seamless windows to work in MetaFrame. Unfortunately not every application in the world is programmed in the same way or using the same development tools. To address this Citrix had to add support for certain non-standard window behavior of applications.
Value Name: ClassName
Value Type: REG_SZ
Value Name: Type
Value Type: REG_DWORD
Seamless Application Termination
Value Name: LogoffCheckSysModules
Value Type: REG_SZ
Enter the list of executable names with a comma and NO spaces between them,
for example: App1.exe,app2.exe,app3.exe
Seamless Engine Registry Changes between Windows 2000 and 2003