Успешно упакован и развернут мой 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)» по двум причинам:
- Таким образом, все пользователи имеют доступ к надстройке, а
- 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) и запустил программу установки от имени администратора.
Результаты
Безотносительно к настройкам реестра, которые я указывал в файле wxs
, мои ключи реестра были созданы в HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Office\Word\AddIns\LesCaveatAddIn
, т.е. они, как и ожидалось, вошли в HKLM, но вместо * перешли в \Software\Wow6432Node\Microsoft.....
1152 *, как я кодировал в файле wxs
. Я предполагаю, что это потому, что моя производственная машина - 64-битная машина.
Как и ожидалось, сама надстройка была установлена в папку c: \ program files (x86)
Была вызвана 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>