More Outlook Resource Sites

Microsoft Developer Network (MSDN)

FAQs and other general resources

Add-in threading issue causes Outlook to crash or hang

If you have written an Outlook add-in with Visual Basic 6.0 and you are getting new and unexpected reports of it crashing, you might want to ask the user whether the Apple ITunes add-in is also installed. According to Outlook MVP Ken Slovak, the ITunes add-in, which synchronizes the Outlook calendar with an IPod, can cause Outlook 2007 to crash and Outlook 2003 to hang in a way that makes it look like another VB6 add-in is responsible, because of a threading issue.

UPDATE: As of 18 Jan 2008, Apple has released a new version of the iTunes add-in that does not produce this behavior.

The Microsoft support engineer whom Ken has been working with explained that Outlook was designed with the assumption that all calls to the Outlook object model are on thread 0. Some other often used DLLs also make that assumption, including the VB6 runtime (MSVBVM60.DLL), which is used in many of the Outlook add-ins currently available.
 
The problem apparently occurs because the Apple add-in sets up a new thread using a named pipe to do the calendar synching but neglects to marshal the thread back to thread 0 for any calls to the Outlook object model. Instead, it calls into the object model instead on thread 7. This lack of a proxying back to thread 0 then sets Outlook to call into MSVBVM60 to pass along any events that have fired due to the object model access (for example the ItemLoad event available only in Outlook 2007, which fires on every object model access to any Outlook item). This then crashes Outlook due to the threading. The stack is read by Watson and whatever is at the bottom of the stack gets blamed for the crash, usually MSVBVM60 but also Kernel32 on Vista. The next time Outlooks starts up, whichever addin was listed lowest in the stack is then blamed for the crash.
 
If no VB6 addin is running, Outlook doesn't immediately crash. Instead, it becomes unstable and might crash at any later time, or it might just get hung in a deadlock between threads, something that won't happen if all calls to the object model are called in thread 0.
 
According to Ken, there is no possible defensive programming that an add-in developer can do to prevent another add-in from causing this problem. The problem add-in must change its code to prevent the problem from occurring. Microsoft is in touch with Apple about the problem with the ITunes add-in. However, any other vendor whose add-in takes the same approach to threading will cause the same problem, which means that this is a vendor-by-vendor problem that will have to be addressed each time a problem add-in is discovered.

Newest Resources

Advanced Outlook regions and Outlook 2010 – first view -- New features and capabilities of Add-in Express advanced form and view regions for Outlook 2010.

Outlook 2010 Fast Shutdown feature -- Article with VB.NET and C# code samples that explains how to handle the OnBeginShutdown and OnDisconnection events, blocked in Outlook 2010 by default.

Print all attachments at once using VBA -- Udi Shitrit shows how to use the Win32 to print all of a message's attachments -- no need to know the file types involved.

Outlook 2010 MAPI Reference -- Official Microsoft reference for MAPI development against Outlook 2010. Header files are also available.

Enter the 64 Bit MAPI Dragon -- Outlook 2010 will be available as both a 32-bit and a 64-bit application. Stephen Griffin previews Microsoft's plans and documentation for 64-bit MAPI support.

(Less than) Portable Search Folders -- Stephen Griffin explains why search folders created by Outlook object model code may not always work and offers a partial solution.

How to programmatically select a custom Form Region -- Helmut Obertanner demonstrates, with screen shots, how to create a form region for an Outlook 2007 contact form and add a button to the Ribbon to switch the Inspector display to the region.

Customize the built-in Outlook Select Names dialog (or any other) -- Helmut Obertanner demonstrates how to intercept an built-in Outlook dialog and display instead a custom .NET form.

Outlook Forms Step by Step -- Create a check request form and make it available on the company intranet with this 16-part illustrated guide.

Visual Studio Tools for Office 2007: VSTO for Excel, Word, and Outlook -- Eric Carter and Eric Lippert update their book on creating Visual Studio Tools for Office applications to cover Visual Studio 2008 and Office 2007.

Outlook Redemption version 4.7 -- Adds the ability to enumerate nicknames stored in the .nk2 file and an RDOStore2.Searches collection that represents search folders, plus other new properties, methods, and events and various bug fixes.

Outlook-Redemption discussion list -- Yahoo! group for dicussing issues related to the Outlook Redemption COM library

Making a Custom Ribbon Appear Only for a Custom Outlook Form -- Norm Estabrook from the VSTO team shows how to make custom tabs, groups and controls appear only in cases where the user opens a custom form in Outlook.

LINQ to DASL: Changing Appointments with C# and LINQ -- Short video that demonstrates how to use VSTO Power Tools to perform a DASL query on the Calendar folder using the LINQ syntax and then perform additional string value checking with a regular expression

Outlook Context Menus and Creating a Meeting from an Email -- Short video demonstrating how to create a context menu command for sending a meeting request to recipients of an email message. Note: The Inspector wrapper class is extraneous and overcomplicates the project.

Login

login
password
Remember me

You will need to register and log in if you want to download the source code for the Microsoft Outlook Programming book. The forums and code sharing areas are open to both registered and non-registered visitors.

Hot Code Samples

Beginner
Save and remove attachments from email items...
Create task from e-mail message (revised)...
Sending a mail message with today's appointments...
Intermediate
C# AddIn sample: InspectorWrapper & CommandBar...
Reply with Attachments
Send Word document as message
Advanced
Insert user signature with VBA
Set color label on appointment
Set email account signature in Outlook 2003...

OutlookCode RSS Feeds

All OutlookCode.com content

Outlook developer news

New Outlook developer resources

OutlookCode.com forums

OutlookCode.com code samples

OutlookCode.com articles