Outlook’s slow add-ins resiliency logic and how to always enable slow add-ins


Overview

This post explains how to deploy registry settings that would force Outlook to always load a specific add-in.

The information in this post only applies to slow (VSTO) add-ins. If Outlook disables your add-in to prevent a crash, this blog post isn't for you.

Requirements

Outlook 2013 or 2016.

Information

Outlook 2013 and 2016's resiliency logic is triggered when one of the criteria enumerated in the Performance criteria for keeping add-ins enabled section of the New in Outlook for developers MSDN article.

Outlook's resiliency logic was introduced with Outlook 2013 and it builds on the foundation set by the resiliency logic in Outlook 2010. As opposed to 2010, Outlook 2013 allows controlling how slow add-ins are handled, giving the users the option to go with the default logic and disable add-ins that take longer than 1 second to load or unload for example, or choose to always enable a certain add-in.

This logic only applies to VSTO add-ins, it doesn't touch COM add-ins. This is why you'll see that add-ins such as the Microsoft Exchange add-in or the Skype for Business add-in are never disabled. Only VSTO add-ins are touched.

One other aspect to note is that if a VSTO add-in requires a module that is not loaded in Outlook's memory, the first add-in to require that module will incur a "penalty" for each additional module that is loaded. This will apply for all add-ins if a required module is not present, the load time of each module that is required will be added to the load time of the add-in.

In addition to modules, the first add-in to load will incur a penalty for loading the .Net Framework.

In conclusion:

  1. The first add-in to be loaded will have a load time equal to: LOAD_NECESSARY_MODULES + LOAD_.NET_FRAMEWORK + RUN_ADDIN_STARTUP_CODE
  2. All future add-ins to be loaded will have a load time equal to: LOAD_NECESSARY_MODULES + RUN_ADDIN_STARTUP_CODE.

Solution / Workaround

To work around the resiliency logic, one can use a simple .reg file and add the add-in to the trusted addins list or a Group Policy Object to deploy the same values that would be generated locally to all the users in the domain:

  1. Add a dword entry called ADDIN_NAME with a value data of 1 under HKEY_CURRENT_USER\Software\Policies\Microsoft\Office\1x.0\Outlook\Resiliency\AddinList
  2. Set the LoadBehavior (US English spelling!) dword value to 3 under HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\Outlook\Addins\ADDIN_NAME
  3. Delete the HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\1x.0\Outlook\Resiliency\DisabledItems key
  4. Re-create the HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\1x.0\Outlook\Resiliency\DisabledItems key
  5. Add a dword entry called ADDIN_NAME with a value of 1 under HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\1x.0\Outlook\Resiliency\DoNotDisableAddinList


Where:

  • ADDIN_NAME is the name of the add-in as found under HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\Outlook\Addins\
  • 1x.0 is the office version, for example 15.0 for Office 2013 and 16.0 for Office 2016

Here is a REG file example:

=================================================================

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Policies\Microsoft\Office\1x.0\Outlook\Resiliency\AddinList]
"ADDIN_NAME"=dword:00000001

[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\Outlook\Addins\ADDIN_NAME]
"LoadBehavior"=dword:00000003

[-HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\1x.0\Outlook\Resiliency\DisabledItems]

[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\1x.0\Outlook\Resiliency\DisabledItems]

[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\1x.0\Outlook\Resiliency\DoNotDisableAddinList]
"ADDIN_NAME"=dword:00000001
​=================================================================​

As far as group policy objects go, please find below the procedure:

  1. Open the Group Policy Management console on a domain controller
  2. Navigate to the domain node, right click it and select Create a GPO in this domain, and Link it here
  3. Give the GPO the desired name
  4. Right click the newly created GPO and click on Edit
  5. In the Group Policy Management Editor, expand Preferences under User Configuration
  6. Afterwards expand Windows Settings
  7. Right click Registry and create the following 5 entries
​Name ​Order ​Action ​Hive ​Key ​Value Name ​Type ​Value Data
ADDIN_NAME​ 1​ Create ​ HKEY_CURRENT_USER ​ Software\Policies\Microsoft\Office\1x.0\Outlook\Resiliency\AddinList​ ADDIN_NAME ​ REG_DWORD ​ 00000001​​
LoadBehavior ​ 2​ Update  HKEY_CURRENT_USER ​ SOFTWARE\Microsoft\Office\Outlook\Addins\ADDIN_NAME​ LoadBehavior ​ REG_DWORD ​ 00000003​​
DisabledItems ​ 3​ Delete ​ HKEY_CURRENT_USER ​ SOFTWARE\Microsoft\Office\1x.0\Outlook\Resiliency\DisabledItems​
DisabledItems ​ 4​ Create ​ HKEY_CURRENT_USER ​ SOFTWARE\Microsoft\Office\1x.0\Outlook\Resiliency\DisabledItems​
ADDIN_NAME ​ 5​ Create ​ HKEY_CURRENT_USER ​ SOFTWARE\Microsoft\Office\Outlook\Resiliency\DoNotDisableAddinList​ ADDIN_NAME ​ REG_DWORD ​ 00000001​

Here's a screenshot of the resulting GPO:


Revisions

Original version: 2017-08-02

Comments (0)

Skip to main content