Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
ms_windows_ms_sql:visual-studio_2017-community-vsto-outlook [2019/01/09 11:16] – [Добавляем файлы] adminms_windows_ms_sql:visual-studio_2017-community-vsto-outlook [2019/02/11 09:13] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +====== Задача ======
 +Нужно реализовать всплывающее окно в **Outlook 2016**, если число получателей письма больше одного. \\
 +Вот что получилось. {{ :ms_windows_ms_sql:multiple_recipients_popup_add-in_src.rar |Исходники}}. {{ :ms_windows_ms_sql:multiple_recipient_popup_add-in_setup.rar |Инсталлятор}}.
 +====== Средства ======
 +**Visual Studio 2017 Community Edition** + **VSTO** (Visual Studio Tools for Office). \\
 +**Tools** -> **Get Tools And Features** -> вкладка **Workloads** -> ставим галочку на **Office/Sharepoint Development**. \\
 +после установки открываем **Visual Studio**. \\
 +**File** -> **New** -> **Project** -> слева **Installed** -> **Visual C#** -> **Office/Share Point** -> **VSTO AddIns** -> **Outlook 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 \\
 +<code>
 +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
 +    }
 +}
 +</code>
 +====== Проверка того, что все работает ======
 +Жмем **Build** -> **Publish** ... \\
 +Выбираем папку, куда опубликуется наша надстройка и выбираем тип - я выбрал CD-ROM. \\
 +В результате в выбранной папке появится файлик **setup.exe** и файлы надстройки, с помощью которых можно установить созданную надстройку. 
 +
 +====== Развертывание ======
 +[[https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2007/cc563937(v=office.12)#creating-a-basic-installer|Creating a Basic Installer for VSTO project]] \\
 +Разворачивать полученную надстройку можно либо с помощью **Cick-Once**, либо с помощью **Microsoft Installer**.
 +Как написано [[https://docs.microsoft.com/ru-ru/visualstudio/vsto/deploying-an-office-solution-by-using-windows-installer?view=vs-2017#Obtain|тут]] **Cick-Once** не позволяет развернуть надстройку сразу для всех пользователей компа/сервера. Однако, мне надо развернуть ее на терминальном сервере.
 +===== Развертывание с помощью Visual Studio Installer =====
 +Скачиваем и устанавливаем [[https://marketplace.visualstudio.com/items?itemName=visualstudioclient.MicrosoftVisualStudio2017InstallerProjects|Microsoft Visual Studio 2017 Installer Projects]] \\
 +В **Solution Explorer** жмакаем правой кнопкой по солюшену и создаем новый проект -  **Add -> New Project... -> Other Project Types -> Visual Studio Installer -> Setup Project**. \\
 +Нам надо добавить файлы надстройки и записи в реестре. \\
 +
 +==== Добавляем файлы ====
 +В **Solution Explorer** жмакаем правой кнопкой по проекту -> **Add -> Project Output...** \\
 +Там в поле **Project** выбран наш единственный проект, а из списка выбираем **Primary Output**. \\
 +В результате в проект инсталлятора добавится **dll** нашей надстройки и необходимые зависимости. \\
 +Кроме того, надо добавить файлы ***.vsto** и ***.manifest**, которые лежат в папке с собранной надстройкой. \\
 +В **Solution Explorer** жмакаем правой кнопкой по проекту -> **Add -> File...** и находим файлы ***.vsto** и ***.manifest** из папки **bin\Release**. \\
 +В **Solution Explorer** жмакаем правой кнопкой по проекту -> **View -> File System**. \\
 +Кликаем по **Application Folder** и справа в строке **DefaultLocation**указываем путь установки. Обычно это **[ProgramFilesFolder][Manufacturer]\[ProductName]**, а значения входящих в путь переменных в свою очередь заданы в свойствах проекта.
 +==== Добавляем записи в реестр ====
 +В **Solution Explorer** жмакаем правой кнопкой по проекту -> **View -> Registry**. 
 +Дальше делаем в соответствии с этим - [[https://docs.microsoft.com/ru-ru/visualstudio/vsto/registry-entries-for-vsto-add-ins?view=vs-2017|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 ======
 +https://www.add-in-express.com/creating-addins-blog/2011/02/25/deploying-peruser-office-extensions-group-policy/ \\
 +
 +====== Тестирование и отладка ======
 +В моем случае - после того как я проверил работу моей надстройки на своей машине, собрал инсталлятор и установил надстройку на целевой сервер она нормально появилась в **Outlook 2016** у пользователя, но запускаться отказывалась. \\
 +Для того, чтобы посмотреть какую ошибку выдает надстройка при запуске нужно:
 +  * открыть окошко cmd и задать переменной **VSTO_SUPPRESSDISPLAYALERTS** значение **0**
 +<code>set VSTO_SUPPRESSDISPLAYALERTS=0</code>
 +  *Запустить **Outlook** из этого окошка.
 +<code>C:\Program Files (x86)\Microsoft Office\Office16\OUTLOOK.EXE</code>
 +Затем в **Outlook -> File -> Options -> Add-Ins -> Manage COM Add-ins Go...** -> ставим галочку на оснастке и жмем **OK**. В результате появится окно с сообщением и кнопкой **Details**.
  • ms_windows_ms_sql/visual-studio_2017-community-vsto-outlook.txt
  • Last modified: 2019/02/11 09:13
  • by 127.0.0.1