Надстройка Outlook постоянно отключается, автоматически устанавливая HKCU RegKey в 0 при установке - PullRequest
0 голосов
/ 18 января 2019

Клиент моей надстройки 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
}

1 Ответ

0 голосов
/ 18 января 2019

Для начала, я не думаю, что кто-то может дать прямой ответ без какого-либо кода или ошибки. Но, возможно, вам помогут некоторые дополнительные проверки.

Надстройки отключены здесь, в реестре, под этим узлом:

Computer \ HKEY_CURRENT_USER \ Software \ Microsoft \ Office \ 1x.0 \ Outlook \ Отказоустойчивость \ DisabledItems

(ваша надстройка не должна быть указана здесь!)

Может случиться так, что надстройка аварийно завершает работу при закрытии.

Иногда Outlook не показывает сбой / ошибку, чтобы изменить это поведение, это действительно полезно:

Установить 'VSTO_SUPPRESSDISPLAYALERTS' со значением '0' в качестве системной переменной в system> advanced> переменные окружения,

https://www.oneplacesolutions.com/support/0053.html

В случае, если надстройка работает медленно при запуске, обратите внимание, так как логика устойчивости Outlook может вызывать определенные вещи. https://blogs.msdn.microsoft.com/emeamsgdev/2017/08/02/outlooks-slow-add-ins-resiliency-logic-and-how-to-always-enable-slow-add-ins/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...