User Tools

Site Tools


Sidebar


Здравствуйте!

Меня зовут Михаил!
Я системный администратор
и наполняю эту wiki,
решая разнообразные IT-задачки.

Моя специализация - виртуализация!

Я всегда готов помочь Вам
наладить IT-инфраструктуру
за скромное вознаграждение!

mike@autosys.tk
+7 (910) 911-96-23

ms_windows_ms_sql:visual-studio_2017-community-vsto-outlook

Задача

Нужно реализовать всплывающее окно в Outlook 2016, если число получателей письма больше одного.
Вот что получилось. Исходники. Инсталлятор.

Средства

Visual Studio 2017 Community Edition + VSTO (Visual Studio Tools for Office).
ToolsGet Tools And Features → вкладка Workloads → ставим галочку на Office/Sharepoint Development.
после установки открываем Visual Studio.
FileNewProject → слева InstalledVisual C#Office/Share PointVSTO AddInsOutlook 2013 and 2016 Add-in

Алгоритм

Для начала я попытаюсь реализовать самый простой вариант.
При нажатии кнопки Send моя надстойка будет проверять количество реципиентов. Если их больше 1 - показываем диалоговое окно с вопросом “Слать/Не слать”…

Реализация

Реализацию нашел в книжке: https://books.google.ru/books?id=DnxuBDWM9E4C&pg=PT157&lpg=PT157&dq=VSTO+show+dialog+on+mail+send&source=bl&ots=-JvI4l1OS9&sig=zaVaxedmASxcDgnrEJp6MVWJJxs&hl=ru&sa=X&ved=2ahUKEwiYnJeLo5reAhXDhKYKHZ9ZAhEQ6AEwBHoECAUQAQ#v=onepage&q=VSTO%20show%20dialog%20on%20mail%20send&f=false

using System;
using Outlook = Microsoft.Office.Interop.Outlook;
using System.Windows.Forms;
using Microsoft.Office.Interop.Outlook;

namespace Multiple_Recipients_PopUP
{
    public partial class ThisAddIn
    {
        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            this.Application.ItemSend += new ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend);
        }

        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {
            // Note: Outlook no longer raises this event. If you have code that 
            //    must run when Outlook shuts down, see https://go.microsoft.com/fwlink/?LinkId=506785
        }

        void Application_ItemSend(object Item, ref bool Cancel)
        {
            Outlook.MailItem currentMailItem = Item as Outlook.MailItem;

            if (currentMailItem != null)
            {
                if (currentMailItem.Recipients.Count > 1)
                {
                    string message = "Send mail to {0} people?";
                    string caption = "More than one recipient...";
                    MessageBoxButtons buttons = MessageBoxButtons.YesNo;
                    DialogResult result;
                    result = MessageBox.Show(String.Format(message, currentMailItem.Recipients.Count), caption, buttons);

                    if (result == DialogResult.No)
                    {
                        Cancel = true;
                        return;
                    }
                }
            }
        }
        #region VSTO generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InternalStartup()
        {
            this.Startup += new System.EventHandler(ThisAddIn_Startup);
            this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
        }
        
        #endregion
    }
}

Проверка того, что все работает

Жмем BuildPublish
Выбираем папку, куда опубликуется наша надстройка и выбираем тип - я выбрал CD-ROM.
В результате в выбранной папке появится файлик setup.exe и файлы надстройки, с помощью которых можно установить созданную надстройку.

Развертывание

Разворачивать полученную надстройку можно либо с помощью Cick-Once, либо с помощью Microsoft Installer. Как написано тут Cick-Once не позволяет развернуть надстройку сразу для всех пользователей компа/сервера. Однако, мне надо развернуть ее на терминальном сервере.

Развертывание с помощью Visual Studio Installer

Скачиваем и устанавливаем Microsoft Visual Studio 2017 Installer Projects
Создаем новый проект. File → New → Project → Other Project Types → Visual Studio Installer → Setup Project.
Нам надо добавить файлы надстройки и записи в реестре.

Добавляем файлы

В Solution Explorer жмакаем правой кнопкой по проекту → View → File System.
В открывшемся окошке жмем правой кнопой по Application Folder и выбираем Add → File…
Добавляем файлы, которые лежат в папке с опубликованной надстройкой, включая папку Application Files со всеми файлами.
Кликаем по Application Folder и справа в строке DefaultLocationуказываем путь установки. Обычно это [ProgramFilesFolder][Manufacturer]\[ProductName], а значения входящих в путь переменных в свою очередь заданы в свойствах проекта.

Добавляем записи в реестр

В Solution Explorer жмакаем правой кнопкой по проекту → View → Registry. Дальше делаем в соответствии с этим - Registry entries for VSTO Add-ins
В окошке Registry On target Machine добавляем ключи: HKLM\Software\Microsoft\Office\Outlook\Addins\Multiple_Recipients_PopUP
И добавляем описанные параметры.
Путь к манифесту задаем как [ProgramFilesFolder][Manufacturer]\[ProductName]\…
В качестве манифеста указываем файл vsto из корня. На сборочной машине у меня файл реестра был указан как filename.vsto|vstolocal. При разворачивании |vstolocal не нужен. Путь к манифесту указываем без |vstolocal.
Правильные значения этих параметров можно поглядеть на компе на котором собиралась и тестировалась надстройка.

Выбираем установку для всех пользователей

В Solution Explorer кликаем по проекту и справа в окне свойств меняем значение поля InstallAllUsers на True.

Публикация с помощью политик GPO

Тестирование и отладка

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

  • открыть окошко cmd и задать переменной VSTO_SUPPRESSDISPLAYALERTS значение 0
set VSTO_SUPPRESSDISPLAYALERTS=0
  • Запустить Outlook из этого окошка.
C:\Program Files (x86)\Microsoft Office\Office16\OUTLOOK.EXE

Затем в Outlook → File → Options → Add-Ins → Manage COM Add-ins Go… → ставим галочку на оснастке и жмем OK. В результате появится окно с сообщением и кнопкой Details.

Discussion

Enter your comment. Wiki syntax is allowed:
S D᠎ J᠎ D M
 
ms_windows_ms_sql/visual-studio_2017-community-vsto-outlook.txt · Last modified: 2018/10/24 08:57 by admin