A while back I encountered an issue that forced me to become introduced to the DDE Launcher used by App-V (SFTDDE.) A customer was encountering an issue where, no matter how much they tuned their terminal servers, even with pre-cached virtual applications; Office applications appeared to always have a three second delay when they double-clicked on an Office document associated with a virtualized instance of Office. Regular launches of these applications (from the shortcut) did not encounter this delay.
What is DDE?
DDE (Dynamic Data Exchange) is one of the oldest IPC (Interprocess Communication) mechanisms in Windows. Since it relies on using the Windows message layer for functionality it still works even though it has been superceded by many far superior technologies. The factor involved in this particular App-V scenario is whether DDE (Dynamic Data Exchange) has been enabled for the application. The main difference between double-clicking a document or launching the application then loading the document when DDE is enabled is that SFTDDE.EXE is used as a DDE launcher instead of SFTTRAY.EXE.
Investigating the customer’s issue found that there was indeed a three-second delay and a Process Monitor trace revealed it:
Double-clicking and triggering the SFTDDE.EXE process:
0 7:47:03.3683129 AM sftdde.exe 848 Process Start SUCCESS Parent PID: 2844
Then the SFTTRAY Start:
3007 7:47:06.1107902 AM sfttray.exe 3408 Process Start SUCCESS Parent PID: 848
By default in App-V when sequencing Office, DDE is enabled. When setting up a file type association that requires DDE support, the client uses a DDE Launcher command. It pulls the command based on the value specified in the following registry location:
The default value is “C:\Program Files\Microsoft Application Virtualization Client\sftdde.exe” “<APP>” <DDE>
If present, the strings <APP> and <DDE> will be replaced with the app’s name and version and the DDE app name, respectively.
When virtualizing Office with App-V, the sequencer enables DDE functionality by using the SFTDDE launcher for each application. One important item to consider is that when double-clicking on a file where the association is with SFTDDE rather than SFTTRAY, App-V will act as a DDE client and sends DDE message broadcast to all open windows. If an instance of word is open, then it will reply back and that instance of WinWord will open the file – regardless of the version of the winword.exe process running. If not, it will trigger the SFTRAY command to launch.
Is this why my Custom File Type Associations Don’t Work Sometimes?
Yes. This explains why in some cases you may have a local or virtualized instance of Microsoft Word 2003 running side by side with Microsoft Word 2010 running local or virtualized. Let’s say you have the .DOC extension associated with Microsoft Word 2003 and the .DOCX extension is associated with Microsoft Word 2010. If Microsoft Word 2010 is currently running and you double-click on .DOC file, it will still open in the existing Winword.exe process (which in this case would be Microsoft Word 2010.)
Why sometimes a delay?
The delay occurs when there is one or more hung top-level windows on the system. When using ShellExecute or ShellExecuteEx to open a document in its associated application and the file is registered to use DDE, the shell will first try to establish a DDE conversation with a running instance of the application by broadcasting a DDE initiation message to all top-level windows.
The DDE initiation message is broadcasted by calling SendMessageTimeout with a 3 second timeout. When there is a hung top-level window when the DDE message is sent, SendMessageTimeout will be blocked until the message is handled by the hung window or the timeout expires. Once the timeout expires, the shell will launch the application associated with the document.
Should I remove this?
For Office, it would be a bad idea. Every trigger of a document double-click will spawn an SFTTRAY launch of the Office application chosen. I have had many customers remove the DDE section, and have %1 as the only option. The DDE message broadcast does not happen and a new instance of the application opens the file. Eventually they restore the functionality and live with the DDE delay.
App-V: Unable to click “Join Meeting” from Virtualized Outlook when Live Meeting 2007 is Installed Locally
If you have virtualized MS Office and have decided to use a local installation of Live Meeting, you may run into this issue. When a user attempts to click on a Live Meeting link (click on “Join Meeting” link) within a virtualized Office application (primarily Outlook) to join the Live Meeting session, they may get the following error:
Failed to initialize critical resources!
Make sure you have all languages installed.
This was caused by the Office application process not having Read permissions as part of the sequencing to the following directory:
%PROGRAMFILES%\Microsoft Office\Live Meeting 8\Console
Office 2010 Sequencing
Office 2007 Sequencing
Problems Sequencing Office 2007
Information about how to use Office 2010 suites and programs on a computer that is running another version of Office
Issues Sequencing Office 2010
Server Command Line Installers Options
Troubleshooting w/ Process Monitor
Introduction To Softgrid Networking
App-V White Paper Portal
App-V Technet Documentation
Top 5 App-V SQL KBs:
25119 Upgrade Issue
Moving 4.1 Databases
App-V Server fails to start when SQL is on the same machine
MWS Administrative Issue
Here’s an example of “don’t do that – but if you must, here’s how.” Access 97 and the Access 97 run-time module is no longer supported by Microsoft. Therefore, custom applications that use the Access 97 run-time module are also technically unsupported. Virtualizing it with App-V does not change that fact although the isolation has led to some unintended positive consequences. Always remember that it is still a risk to use App-V in this manner as future releases and patches cannot be guaranteed to be regression free in terms of how it will affect an unsupported technology.
However, if you insist on sequencing an application that uses it, the following can be done to allow you to sequence Access 97 Run-time modules in versions 4.5 or later:
First, the registry key:
HKEY_CLASSES_ROOT\Licenses\8CC49940-3146-11CF-97A1-00AA00424A9F will be missing. This will result in a license error.
To rectify this, add the following registry entry
This must be done and rebooted on the sequencer prior to the start of sequencing.
Install to a Mount Drive during sequencing
Upon completion of the installation, DO NOT STOP MONITORING.
Open a command prompt rename %WINDIR%\fonts\hatten.ttf to hatten.xxx
Launch Application again.
Click Stop Monitoring.
The options here:
- Click2runMapi: For MAPI Overrides
- Click2runOWSSupp: Microsoft SharePoint Client Support
- Click2runWDS: Search MAPI Protocol Handler and Host Search MAPI Protocol Handler Manager Overrides. This allows for Fast Search in Outlook
- OSpp: Microsoft KMS Client.
- OSpp_Core: Office Software Protection Platform
- OSppWoW64: Microsoft KMS Client for x64.
Then on the client, we deploy the handlers which place in the host-side handlers. This will expose the proxies.
- Click2runOneNoteProxy: Send to OneNote printer Proxy
- Click2runOutlookProxies: All MAPI and Mail control panel applet
- Click2runWDSProxy: Search Proxy and Office Document indexing
- Click2runOWSSuppProxies: Sharepoint Client