2015-05-19 2 views
0

Фон у меня есть старый addin, который я использую для установки другого addin и удаления старого на ThisAddIn_Startup. Все, казалось, отлично работает, но нашел один компьютер, где решение не сработало.Можно ли перезагрузить внешний вид списка Office.ComAddIn?

Я устанавливаю и удаляю аддисты успешно, но addin не загружается при первой загрузке.

private static void EnableNewPlugin() 
{ 
    Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application(); 
    object index = "NewAddin"; 
    Office.COMAddIn addin = null; 
    addin = app.COMAddIns.Item(ref index); 
    addin.Connect = false; 
    addin.Connect = true; 
} 

Так что этот метод работает на всех остальных компьютерах, но проблема на этом одном компьютере это, кажется, не найти его в списке app.COMAddIns. Итак, мой вопрос в том, как программно перезапустить список COMAddIns?

ответ

1

Update метод сбора COMAddIns используется для обновления списка COM надстройки из реестра Windows.

Но зачем вам нужно создать новый экземпляр приложения Outlook в коде? Вы разрабатываете надстройку Outlook? Если это так, вы можете использовать свойство Application класса add-in. Или вы можете получить экземпляр исполняемого экземпляра Outlook во время выполнения, используя метод GetActiveObject класса Маршал. См. How to: Get and Log On to an Instance of Outlook для получения дополнительной информации.

Также я предлагаю разбить цепочку вызовов и объявить каждое свойство или метод вызова отдельной строкой кода. Таким образом, вы сможете мгновенно выпустить все базовые COM-объекты. Используйте System.Runtime.InteropServices.Marshal.ReleaseComObject, чтобы освободить объект Outlook, когда вы его закончили. Затем установите переменную Nothing в Visual Basic (null на C#), чтобы освободить ссылку на объект. Подробнее об этом читайте в статье Systematically Releasing Objects в MSDN.

1

Если кто-то сталкивается с тем же вопросом, это, похоже, сработало для меня.

COMAddIns.Update(); 
Смежные вопросы