Клиент моей надстройки outlook начал жаловаться, что надстройка не запускается при запуске Outlook.Я посмотрел, и каждый раз, когда Outlook запускается, LoadBehaviour устанавливается на 0.
Надстройка записывается как управляемая надстройка COM (извините, может 'изменить его - устаревший инструмент) с C # 4.0.
Он зарегистрирован в HKLM для всех пользователей.
На клиенте запущен Outlook 365ProPlus версии 1708 (сборка 8431.22.42, запускаемая нажатием) 32-разрядная (16.0.84.31.2110)
Клиентская машина Windows 10 64-разрядная.
Ключ LoadBehaviour уровня HKCU, который продолжает сбрасываться до 0, генерируется на узле Software \ Microsoft \ Office .. (в отличие от Software \ Wow6432Node ...)
Надстройка отображается в списке «Неактивные надстройки приложения» в Outlook, но не включается через интерфейс (вы можете установить ее, но она не включается).
Надстройка, помеченная как «всегда включена» в списке «медленных и отключенных надстроек COM-надстроек».
Это единственная загрузка надстройкичерез mscoree.dll, указанный в списке надстроек (я знаю, что если бы существовала другая надстройка mscoree.dll, и она была бы отключена, то и наша была бы отключена).
Я изменяю HKCU LoadBehaviour на 3 вручную через RegEdit, и он загружает надстройку при следующем открытии Outlook, но при следующем перезапуске Outlook надстройка отключается, и LoadBehaviour снова устанавливается на 0.
Похоже, что ни у одного другого клиента проблема не возникает, и я не могу воспроизвести проблему и на локальном экземпляре Outlook 365.
Как всегда,любая помощь очень ценится!
Ура!
------ РЕДАКТИРОВАТЬ ----------
В соответствии с просьбой, ниже приводится схемадействий, происходящих с методом OnStartupComplete надстройки.
Надстройка предназначена для предоставления интерфейса Outlook пользователям, использующим компонент обмена почтой в нашей более крупной службе SaaS.Надстройка соединяет пользователя с нашим сервером, где у него есть почтовые элементы (в формате html), полученные от других пользователей.Надстройка создаст локальный файл PST и создаст почтовые элементы внутри этого PST с HTML и вложениями, установленными в качестве содержимого.Надстройка также обнаружит, пытается ли пользователь ответить / fwd на одно из созданных «писем», и переопределит процесс по умолчанию, чтобы отобразить веб-страницу с сервера.Процесс синхронизации сервера запускается с той же частотой, что и отправка / получение Outlook, путем добавления обработчика в событие Session.SyncObjects [1] .SyncStart.сам процесс синхронизации обрабатывается в отдельном процессе BackgroundWorker.
public void OnStartupComplete()
{
if (_applicationObject == null)
return;
try
{
if (_applicationObject.ActiveExplorer() == null)
return;
_version = _applicationObject.Version.Split(new string[] { "." }, System.StringSplitOptions.RemoveEmptyEntries);
StaticGlobals.OutlookVersionString = _applicationObject.Version;
StaticGlobals.OLIVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version ;
StaticGlobals.OLIFileVersionString = FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).ProductVersion;
//This class has all the processes of my add-in process.
_addinControlObj = new AddInControlerClass();
//Get references to application, explorer objects
_addinControlObj.ApplicationObject = _applicationObject;
_explorers = _addinControlObj.ApplicationObject.Explorers;
//tracks creation of new explorer & inspector windows in order to override reply/fwd actions on specific scenarios (it provides extra options for the user before opening mail editor)
_explorers.NewExplorer += this.Open_NewExplorer;
_currentExplorer = _addinControlObj.ApplicationObject.ActiveExplorer();
_addinControlObj.ApplicationObject.Inspectors.NewInspector += this.Open_NewInspector;
//Create redemption object
_rdoSession = Redemption.RedemptionLoader.new_RDOSession();
_rdoSession.MAPIOBJECT = _addinControlObj.ApplicationObject.Session.MAPIOBJECT;
((Microsoft.Office.Interop.Outlook.ApplicationEvents_11_Event)_applicationObject).Quit += ReleaseComObjects;
((Microsoft.Office.Interop.Outlook.ApplicationEvents_11_Event)_applicationObject).ItemSend += SendMail;
}
catch (System.Exception ex)
{
Common.HandleErrors(ex, "On Connection", false, null, "", StaticGlobals.OutlookVersionString);
}
try
{
OutlookCommands olCommands = new OutlookCommands();
//Get PST file name with Outlook user name suffixed. Common.GetAppPath() will point to a sub folder within either %UserProfile%\AppData\Local or user pre-defined location
_addinControlObj.FilePath = Path.Combine(Common.GetAppPath(), olCommands.GetFileNameUserSpecific(_addinControlObj.ApplicationObject, "addinCreatedDataFileName.pst"));
_addinControlObj.CreateProjectConnections(); // connects to the server to retreive access token for API
}
catch (System.Exception ex)
{
Common.HandleErrors(ex, "On startup complete - Get and validate proj details", true, null, "", StaticGlobals.OutlookVersionString);
}
try
{
//region create PST store and sub-folders
_addinControlObj.CheckAndCreateFolders();
}
catch (System.Exception ex)
{
Common.HandleErrors(ex, "On startup complete - Check and create folders", true, null, "", StaticGlobals.OutlookVersionString);
}
#region add add-in sync method to Outlook send/receive all object
try
{
if (_addinControlObj.ApplicationObject.Session.SyncObjects.Count > 0)
{
_syncObject = _addinControlObj.ApplicationObject.Session.SyncObjects[1];
_syncObject.SyncStart += _syncObject_SyncStart;
}
else
{
Common.HandleErrors(null, "On startup complete - Warning - No SyncObjects accounts found.", false, null, "", StaticGlobals.OutlookVersionString);
}
}
catch (System.Exception ex)
{
Common.HandleErrors(ex, "On startup complete - Add to sync objects", true, null, Properties.Resources.SyncAttachFailMessage, StaticGlobals.OutlookVersionString);
}
#endregion
#region Define the functions for the attachment size limitation.
try
{
_attachmentSizeLimitation.application = _applicationObject;
_attachmentSizeLimitation.sessionRDO = _rdoSession;
_attachmentSizeLimitation.connect = this;
_attachmentSizeLimitation.DefineFunctions();
}
catch (System.Exception ex)
{
Common.HandleErrors(ex, "On startup complete - Initialize attachment limitation.", false, null, "", StaticGlobals.OutlookVersionString);
}
#endregion
}