Создать VSTO MSI установить с VS2019 и WiX - PullRequest
0 голосов
/ 25 октября 2019

Я не являюсь обычным разработчиком VS

У меня есть проект VS2010, который создает надстройку VSTO для Outlook и использует установку Click-Once

Хотя это все еще работает даже споследняя версия Office 365, VS2010, теперь становится все труднее, а метод Click Once на протяжении многих лет создавал несколько головных болей. Теперь я хотел бы создать MSI-версию установщика

Я установил VS2019 Community вместе сWiX, я конвертировал копию своего проекта в VS2019, и он все еще работает

Я читал различные веб-страницы по созданию WiX, но они либо довольно старые, либо недостаточно подробные для меня.

Полагаю, что я пытаюсь сделать немного необычно тем, что я хочу использовать последнюю версию VS для создания MSI надстройки VSTO с .NET4 и VSTO2010

ХотяУ меня есть суть того, что требуется, дьявол кроется в деталях, и я уверен, что это не сработает, если я не получу версии / пути / записи в реестре / зависимости и т.д. абсолютноправильно

Мой текущий щелчок, как только у установщика есть папки для DotNetFX40Client VSTOR40 WindowsInstaller3_1

Использование информации здесь https://www.add -in-express.com / creation-addins-blog / 2012/11/ 13 / wix-installation-vsto-office-addin /

Я не совсем уверен, какие именно XML-записи нужно вставить, как их установить, если чего-то не хватает, у меня также естьвидел проверки на Office2007 и т. д., но я не знаю, как привязать его к конкретной версии для офиса. то есть, как сейчас, он все еще работает в O365

Извините за бессвязный пост, но очевидно, что когда-то появившийся клик содержит довольно много информации, но я не совсем уверен, как добраться оттуда до работающего установщика MSI

Например, после перестройки проекта в VS2019 и отладки, и выпуска. У меня нет файлов манифеста в той папке obj, которая, как кажется, нужна установщику

Для всех ошибок, Click Click простонесколько кликов в студии, и все остальное для вас.

Надеюсь, там есть руководство для манекенов ... или даже руководство для манекена!

Спасибо

1 Ответ

1 голос
/ 03 ноября 2019

VSTO 2010 является последней версией среды выполнения. Вы можете обновить ваш проект до более новой версии .NET Framework, хотя.

Нет необходимости включать полный VSTO 2010 распространяемый в вашей программе установки. По моему опыту, надстройки работают отлично, если вы просто включаете сборки времени выполнения из целевой папки в пакет установщика.

Вы заявляете, что не можете найти файл манифеста в вашей obj-папке. Тем не менее, после успешной компиляции вашей надстройки вы должны найти, по крайней мере, dll вашей надстройки, ее vsto-файл, его манифест и все упомянутые dll в вашей целевой папке. Вам нужно будет включить все эти файлы в ваш установщик. Если вы не можете их найти, вы выполняете поиск не в той папке или во время компиляции произошла ошибка.

Команда, обслуживающая и развивающая набор инструментов WiX, отлично справляется со своей задачей. Однако документация по WiX не поспевает за набором инструментов. Кроме того, многие вопросы, касающиеся создания сценария установки WiX, на самом деле являются вопросами о функциональности самого установщика Windows и о том, что вам нужно сделать в конкретных обстоятельствах. Вот почему может быть довольно утомительно найти рабочее решение.

Ниже я приведу пример структуры скрипта установки, который я придумал. Обратите внимание, что могут быть некоторые опечатки, так как я на самом деле не запускал этот скрипт. Кроме того, все должно быть в порядке. Я использую этот вид сценария с набором инструментов WiX версии 3.12 для установки надстройки PowerPoint. Пожалуйста, убедитесь, что вы ссылаетесь на WixUiExtension и WixUtilExtension в вашем WiX-проекте. Если вы хотите использовать некоторые дополнительные функции, также обратитесь к WixNetFXExtensions. Некоторые расширенные функции будут доступны только при создании пользовательских действий. Ради простоты и обобщения я не включил их здесь.

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
  <?if $(var.Platform) = x64 ?>
  <?define Win64 = "yes" ?>
  <?define PlatformProgramFilesFolder = "ProgramFiles64Folder" ?>
  <?else ?>
  <?define Win64 = "no" ?>
  <?define PlatformProgramFilesFolder = "ProgramFilesFolder" ?>
  <?endif ?>
  <?define YOUR_PROJECT_TargetDir=$(var.YOUR_PROJECT.TargetDir)?>
  <Product Id="*" Name="YOUR_PRODUCT_NAME" Language="1033" Version="YOUR_VERSION_NUMBER" Manufacturer="YOUR_MANUFACTURER_NAME" UpgradeCode="6DC92DB3-AA62-4C13-95E0-45C06AADDB32">
    <Package InstallerVersion="500" Compressed="yes" Platform="x64" InstallScope="perMachine"/>
    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
    <MediaTemplate EmbedCab="yes"/>
    <Feature Id="ProductFeature" Title="YOUR_FEATURE_TITLE" Level="1">
      <ComponentGroupRef Id="ProductComponents" />
      <ComponentRef Id="RegistryEntries"/>      
    </Feature>
    <Icon Id="ProductIcon" SourceFile="$(var.ProjectDir)NAME_OF_YOUR_PRODUCT_ICON.ico"/>
    <Property Id="ARPPRODUCTICON" Value="ProductIcon"/>
    <WixVariable Id="WixUIBannerBmp" Value="$(var.ProjectDir)NAME_OF_YOUR_BANNER.bmp"/>
    <WixVariable Id="WixUIDialogBmp" Value="$(var.ProjectDir)NAME_OF_YOUR_BACKGROUND.bmp"/>
    <UIRef Id="WixUI_Minimal" />
    <PropertyRef Id="WIX_ACCOUNT_USERS" />
  </Product>  
  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="$(var.PlatformProgramFilesFolder)">
        <Directory Id="MANUFACTURERFOLDER" Name="!(bind.property.Manufacturer)" >
          <Directory Id="INSTALLFOLDER" Name="!(bind.property.ProductName)" />
        </Directory>
      </Directory>      
    </Directory>
  </Fragment>
  <Fragment>
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER"> 
      <Component Id="NAME_OF_YOUR_DLL.dll" Guid="1E9A1682-0F62-4CDF-A0C9-6D86B6950E26">
        <File Id="NAME_OF_YOUR_DLL.dll" Name="NAME_OF_YOUR_DLL.dll" Source="$(var.YOUR_PROJECT_TargetDir)NAME_OF_YOUR_DLL.dll" />
      </Component>
      <Component Id="NAME_OF_YOUR_MANIFEST.dll.manifest" Guid="736F51B1-5B1F-49DA-976E-33EE4C5C8AC0">
        <File Id="NAME_OF_YOUR_MANIFEST.dll.manifest" Name="NAME_OF_YOUR_MANIFEST.dll.manifest" Source="$(var.YOUR_PROJECT_TargetDir)NAME_OF_YOUR_MANIFEST.dll.manifest" />
      </Component>
      <Component Id="NAME_OF_YOUR_VSTO_FILE.vsto" Guid="12D44F21-62A4-4B8E-B018-3B9B325512C1">
        <File Id="NAME_OF_YOUR_VSTO_FILE.vsto" Name="NAME_OF_YOUR_VSTO_FILE.vsto" Source="$(var.YOUR_PROJECT_TargetDir)NAME_OF_YOUR_VSTO_FILE.vsto" />
      </Component>      
    </ComponentGroup>
  </Fragment>  
  <Fragment>
    <DirectoryRef Id="TARGETDIR">
      <Component Id="RegistryEntries" Guid="A495FAB3-8440-4357-83F7-D1F4EABAA06A" Win64="$(var.Win64)">
        <RegistryKey Root="HKLM" Key="Software\Microsoft\Office\Outlook\AddIns\!(bind.property.ProductName)">
          <RegistryValue Id="Description" Type="string" Name="Description" Value="!(bind.property.ProductName)" />
          <RegistryValue Id="FriendlyName" Type="string" Name="FriendlyName" Value="!(bind.property.ProductName)" />
          <RegistryValue Id="LoadBehavior" Type="integer" Name="LoadBehavior" Value="3"/>
          <RegistryValue Id="Manifest" Type="string" Name="Manifest" Value="[#NAME_OF_YOUR_VSTO_FILE.vsto]|vstolocal" KeyPath="yes"/>
        </RegistryKey>        
      </Component>
    </DirectoryRef>
  </Fragment>
</Wix>

Пожалуйста, дайте мне знать, если у вас есть дополнительные вопросы.

...