Как упаковать надстройку Word для VSTO для развертывания с использованием WIX? - PullRequest
0 голосов
/ 23 апреля 2019

Я разработал VSTO Word add in в VS 2017 Pro. Работает нормально, готов к развертыванию. Однако я не могу найти рабочую процедуру для упаковки моего VSTO Word add in для использования на машинах, отличных от моей машины для разработки. Для любого конкретного компьютера мне нужно развернуть его один раз и сделать его доступным для любого пользователя, который может войти в систему с использованием своей учетной записи.

Впервые столкнулся с этим , но он предполагает использование InstallShield Limited Edition, который, по-видимому, больше не доступен для VS 2017.

Попробовал это , но в некоторых его шагах, похоже, отсутствуют части или произнесено "сделать х" без объяснения причин.

Попробовал InnoSetup и bovendor / VstoAddinInstaller, но следуя процедуре bovendor, приводит к тому, что компилятор Innosetup выдает ошибку (в поле, заданном bovender, отсутствует обязательный элемент). Не могу получить ответ от Bovendor.

Поиск Microsoft документов и просто не могу найти процедуру. Может ли кто-нибудь предоставить процедуру упаковки надстройки Word для развертывания?

Обновление Успешно упаковал и развернул мою надстройку с помощью набора инструментов WiX. Смотрите мой ответ ниже

Ответы [ 2 ]

1 голос
/ 24 апреля 2019

Успешно упакован и развернут мой add-in с использованием набора инструментов WiX

Кредит: я узнал большую часть этого, используя пример Питера ван дер Вестуизена в Экспресс блоге .

Я использовал Visual Studio Pro 2017, .NET 4.6.1 и C# на моей машине разработки (64-разрядной) для реализации моей VSTO Word надстройки.

Мое требование - один раз развернуть add-in на 64-разрядной рабочей машине (т. Е. В главном образе виртуального рабочего стола Citrix), чтобы он был доступен любому пользователю, который входит в рабочую машину (т. Е. Входит в виртуальную машину). рабочий стол на основе мастер-образа). 32-разрядная версия Word 2013 установлена ​​на главном образе.

Насколько я понимаю, это означает, что «надстройка» должна быть установлена ​​в «C: \ Program Files (x86)» по двум причинам:

  1. Таким образом, все пользователи имеют доступ к надстройке, а
  2. Under (x86), потому что это 32-разрядная версия Word).

Кроме того, поскольку всем пользователям необходим доступ к add-in, необходимые параметры ключа реестра VSTO находятся в корневом каталоге HKLM (а не HKCU). По сути, эта настройка «всех пользователей» противоположна настройке «одного пользователя» Click-Once. Кстати, я в анклаве, который не подключен к Интернету. Итак, все используемое мной программное обеспечение загружается в другое место, а затем переносится в анклав и устанавливается локально.

Файлы выпуска для моей надстройки VSTO word (т.е. в C:\....\Visual Studio 2017\Projects\FooAddIn\FooAddIn\bin\Release):

  • FooAddIn.dll
  • FooAddIn.dll.manifest
  • FooAddIn.vsto
  • Microsoft.Office.Tools.Common.v4.0.Utilities.dll

Что я сделал

  • Загрузил и установил 'WiX' v3.11.1 на мою машину для разработки с http://wixtoolset.org/releases/.

  • Загрузил и установил «Wix Toolset Visual Studio 2017 Extension» на мою машину для разработки с https://marketplace.visualstudio.com/items?itemName=RobMensching.WixToolsetVisualStudio2017Extension

  • Открыл мой add-in проект FooAddIn, используя VS 2017 и в Solution Explorer, щелкнув правой кнопкой мыши на верхнем Solution узле и щелкнув Add -> New Project.

  • В диалоговом окне Add New Project нажмите v3 в WiX Toolset, а затем нажмите Setup Project for WiX v3. Я назвал новый проект FooAddInSetup. Visual Studio Solution Explorer показывает Solution FooAddIn (2 projects), проект FooAddIn и проект FooAddInSetup.

  • В FooAddInSetup -> References добавлены ссылки на C:\Program Files (x86)\WiX Toolset v3.11\bin\WixNetFxExtension.dll и C:\Program Files (x86)\WiX Toolset v3.11\bin\WixUIExtension.dll (они необходимы элементам файла Product.wxs для сборки установщика).

  • Настроил VS также для сборки программы установки: В VS нажмите Build -> Configuration Manager. В диалоговом окне Configuration Manager установите флажок Build для FooAddInSetup.

  • Создано EULA.rtf (у меня написано "Это безлицензионное программное обеспечение") и помещено в C: .... \ Visual Studio 2017 \ Projects \ FooAddIn \ FooAddInSetup

  • Создана переменная препроцессора для пути к расположению моих файлов выпуска VSTO: В обозревателе решений правой кнопкой мыши щелкнули FooAddInSetup -> Properties. На вкладке FooAddInSetup нажмите «Построить». В разделе General щелкнул Define 'Debug' preprocessor variable. В текстовое поле Define preprocessor variables: введите AddinFiles=..\FooAddIn\bin\$(Configuration)\

  • Заполнил файл шаблона WiX Product.wxs для моего add-in, как показано ниже под Файл Product.wxs

  • Примечание. В файле wxs я изменил гиперссылку Visual Studio 2010 Tools for Office Runtime в элементе Condition - ссылка в примере с Питером мертва.

  • Я установил Конфигурацию решения на Release и построил решение.

  • Скопировал FooAddInSetup.msi из ...\FooAddInSetup\bin\release на моем компьютере разработчика на мою рабочую машину (мастер VDI) и запустил программу установки от имени администратора.

Результаты

  1. Безотносительно к настройкам реестра, которые я указывал в файле wxs, мои ключи реестра были созданы в HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Office\Word\AddIns\LesCaveatAddIn, т.е. они, как и ожидалось, вошли в HKLM, но вместо * перешли в \Software\Wow6432Node\Microsoft..... 1152 *, как я кодировал в файле wxs. Я предполагаю, что это потому, что моя производственная машина - 64-битная машина.

  2. Как и ожидалось, сама надстройка была установлена ​​в папку c: \ program files (x86)

  3. Была вызвана Word, и надстройка была загружена как положено

Файл Product.wxs

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">

  <!--
  The boilerplate Product.wxs file already contains the minimum amount of elements needed to build a WiX installer. 
  If the Product element, Id attribute is set to an asterisk (*), WiX will generate a new GUID every time the setup project is compiled (I left it as-is). 
  Change the Name attribute value and Manufacturer attribute value to values of your choice.
  -->
  <Product Id="*"
           Name="FOO Add-In"
           Language="1033"
           Version="1.0.0.0"
           Manufacturer="Foo Masters"
           UpgradeCode="4b35cc09-4780-4644-a7d4-f5901f7a7e45">

    <!--Attributes shown are the minimum number needed to build the setup project.-->
    <Package InstallerVersion="200"
             Compressed="yes"
             InstallScope="perMachine" />

    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />

    <!-- Verify if VSTO Office Runtime is installed -->
    <Property Id="VSTORUNTIMEREDIST">
      <RegistrySearch
        Id="VSTORuntimeRedist"
        Root="HKLM"
        Key="SOFTWARE\Microsoft\VSTO Runtime Setup\v4R"
        Name="Version"
        Type="raw" />
    </Property>

    <Condition
      Message="The Visual Studio 2010 Tools for Office Runtime is not installed. 
  Please download and install from https://www.microsoft.com/en-us/download/details.aspx?id=48217.">
      <![CDATA[Installed OR VSTORUNTIMEREDIST>="10.0.30319"]]>
    </Condition>

    <!-- Verify if .NET Framework is installed -->
    <PropertyRef Id="NETFRAMEWORK40FULL"/>
    <Condition Message="This application requires .NET Framework 4.0.">
      <![CDATA[Installed OR NETFRAMEWORK40FULL]]>
    </Condition>

    <!--I want one Cab file, so only one Media element is needed. Make sure the EmbedCab attribute value is "yes".-->
    <Media Id="1" Cabinet="FooAddin.cab" EmbedCab="yes"/>

    <!--Set values for display on setup progeam UI-->
    <Feature Id="ProductFeature" Title="FOO Add-In" Level="1">
      <ComponentGroupRef Id="ProductComponents" />
      <ComponentRef Id="Registry_FriendlyName" />
      <ComponentRef Id="Registry_Description" />
      <ComponentRef Id="Registry_Manifest" />
      <ComponentRef Id="Registry_LoadBehavior" />
    </Feature>

    <!--Specify that the WiXUI_Minimal UI should be used, i.e, the simplest UI available -->
    <UIRef Id="WixUI_Minimal" />

    <!--Specify the EULA file to use-->
    <WixVariable Id="WixUILicenseRtf" Value="EULA.rtf" />

  </Product>

  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLFOLDER" Name="FooAddin" />

        <!-- Add required VSTO registry entries for 32-bit Word -->
        <!-- see https://docs.microsoft.com/en-us/visualstudio/vsto/registry-entries-for-vsto-add-ins?view=vs-2019-->

        <Component Id="Registry_FriendlyName">
          <RegistryValue Id="RegKey_FriendlyName" Root="HKLM"
                         Key="Software\Microsoft\Office\Word\AddIns\FooAddin"
                         Name="FriendlyName"
                         Value="FOO Add-In"
                         Type="string" KeyPath="yes" />
        </Component>
        <Component Id="Registry_Description">
          <RegistryValue Id="RegKey_Description" Root="HKLM"
                         Key="Software\Microsoft\Office\Word\AddIns\FooAddin"
                         Name="Description"
                         Value="FOO Add-In"
                         Type="string" KeyPath="yes" />
        </Component>
        <Component Id="Registry_Manifest">
          <RegistryValue Id="RegKey_Manifest" Root="HKLM"
                         Key="Software\Microsoft\Office\Word\AddIns\FooAddin"
                         Name="Manifest" Value="[INSTALLFOLDER]FooAddin.vsto|vstolocal"
                         Type="string" KeyPath="yes" />
        </Component>
        <Component Id="Registry_LoadBehavior">
          <RegistryValue Id="RegKey_LoadBehavior" Root="HKLM"
                         Key="Software\Microsoft\Office\Word\AddIns\FooAddin"
                         Name="LoadBehavior" Value="3"
                         Type="integer" KeyPath="yes" />
        </Component>

      </Directory>
    </Directory>
  </Fragment>

  <Fragment>

    <!-- Add refs to the components of the VSTO-->

    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">

      <Component Id="MSOfficeToolsCommon_dll_Component">
        <File Id="MSOfficeToolsCommon_dll" KeyPath="yes"
          Name="Microsoft.Office.Tools.Common.v4.0.Utilities.dll"
          Source="$(var.AddinFiles)"></File>
      </Component>

      <Component Id="FooAddin_dll_Component" >
        <File Id="FooAddin_dll" KeyPath="yes"
              Name="FooAddin.dll"
              Source="$(var.AddinFiles)" />
      </Component>

      <Component Id="FooAddin_vsto_Component">
        <File Id="FooAddin_vsto" KeyPath="yes"
          Name="FooAddin.vsto"
          Source="$(var.AddinFiles)"></File>
      </Component>

      <Component Id="FooAddin_dll_manifest_Component">
        <File Id="FooAddin_dll_manifest" KeyPath="yes"
          Name="FooAddin.dll.manifest"
          Source="$(var.AddinFiles)"></File>
      </Component>

    </ComponentGroup>
  </Fragment>
</Wix>
1 голос
/ 24 апреля 2019

Я обычно использую развертывание Click-Once в Visual Studio. Вы можете развернуть его по сетевому пути, чтобы другие пользователи могли установить его.

Сначала вы хотите создать не истекающий сертификат для проектов Visual Studio

Введите Developer Command в меню «Пуск», щелкните правой кнопкой мыши и выберите Запуск от имени администратора

Start Menu

Вставьте следующие команды в командную строку для MakeCert и pvk2pfx

MakeCert /n "CN=Your New Cert" /r /h 0 /eku "1.3.6.1.5.5.7.3.3,1.3.6.1.4.1.311.10.3.13" /e "01/01/2100" /sv MyNewCert.pvk MyNewCert.cer 
pvk2pfx -pvk MyNewCert.pvk -spc MyNewCert.cer -pfx MyNewCert.pfx

Примечание:

  • Формат даты соответствует стандарту США MM/DD/YYYY
  • Параметр -f можно использовать в конце строки pvk2pfx для перезаписи существующего файла
  • Вам будет предложено создать пароль (это необязательно)

cmd prompt

После запроса пароля вам нужно будет запустить вторую командную строку, просто нажав клавишу Enter .

cmd prompt2

Теперь вы можете выбрать один и тот же сертификат для нескольких проектов Visual Studio

В свойствах проекта Visual Studio выберите Подписание *, нажмите Выбрать из файла… . Перейдите по тому же пути из командной строки и выберите файл сертификата (* .pfx)

Visual Studio Signing

Опубликовать проект

Затем перейдите на вкладку Опубликовать в свойствах проекта и нажмите Опубликовать сейчас . Это создаст исполняемый файл в опубликованном месте. Тогда вам просто нужно отправить ссылку на файл .exe вашим конечным пользователям.

publish

...