Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用VS2019和WiX创建VSTO MSI安装_Wix_Windows Installer_Vsto_Visual Studio 2019_Office Addins - Fatal编程技术网

使用VS2019和WiX创建VSTO MSI安装

使用VS2019和WiX创建VSTO MSI安装,wix,windows-installer,vsto,visual-studio-2019,office-addins,Wix,Windows Installer,Vsto,Visual Studio 2019,Office Addins,我不是一个普通的VS开发者 我有一个VS2010项目,它为Outlook创建一个VSTO外接程序,并使用“单击一次”安装 尽管这在最新的Office 365上仍然有效,但是VS2010现在已经很麻烦了,而且单击一次的方法在过去的几年中造成了一些麻烦。我现在想创建一个MSI版本的安装程序 我已经安装了VS2019社区以及WiX,我已经将我的项目的一个副本转换为VS2019,它似乎仍然在运行 我读过关于创建WiX的各种网页,但它们要么很旧,要么对我来说不够详细 我想我尝试做的有点不寻常,因为我想使用

我不是一个普通的VS开发者

我有一个VS2010项目,它为Outlook创建一个VSTO外接程序,并使用“单击一次”安装

尽管这在最新的Office 365上仍然有效,但是VS2010现在已经很麻烦了,而且单击一次的方法在过去的几年中造成了一些麻烦。我现在想创建一个MSI版本的安装程序

我已经安装了VS2019社区以及WiX,我已经将我的项目的一个副本转换为VS2019,它似乎仍然在运行

我读过关于创建WiX的各种网页,但它们要么很旧,要么对我来说不够详细

我想我尝试做的有点不寻常,因为我想使用最新的VS创建一个带有.NET4和VSTO2010的VSTO插件MSI

虽然我已经获得了所需的jist,但关键在于细节,我确信除非我获得绝对正确的版本/路径/注册条目/依赖项等,否则它不会起作用

我当前的click once安装程序具有DotNetFX40Client VSTOR40 WindowsInstaller3\u 1的文件夹

使用此处的信息

我不太确定要放入什么XML条目,如果缺少什么东西,如何安装它,我也看到了Office2007等的检查,但我不知道如何将它与特定的office版本联系起来。ie现在仍然在O365中工作

很抱歉,这篇文章很杂乱,但很明显,点击一次清单中有很多信息,但我不太确定如何从那里获得一个工作的msi安装程序

例如,在VS2019中重建了项目,调试和发布我在那些obj文件夹中没有清单文件,安装程序看起来需要这些文件

尽管有很多缺点,但单击一次只需在studio中单击几下,其余的都会为您排序

希望有一个傻瓜指南在那里。。。甚至是假人的向导


感谢您,VSTO 2010是运行时的最新版本。不过,您可以将项目更新为.NET Framework的更新版本

无需在安装程序中包含完整的VSTO 2010可再发行版本。根据我的经验,如果只将目标文件夹中的运行时程序集包含在安装程序包中,则加载项运行得非常好

您声明在obj文件夹中找不到清单文件。但是,成功编译外接程序后,您至少应该在目标文件夹中找到外接程序的dll、其vsto文件、其清单和所有引用的dll。您需要在安装程序中包含所有这些文件。如果找不到它们,则可能是在错误的文件夹中搜索,或者是在编译过程中出错

维护和开发WiX工具集的团队做得很好。然而,WiX的文档并没有跟上工具集的步伐。另外,关于创建WiX安装脚本的许多问题实际上是windows安装程序本身的功能问题,以及在特定情况下需要它做什么。这就是为什么提出一个有效的解决方案会非常乏味的原因

在下面,我将为您提供一个安装脚本的结构示例。请注意,可能有一些打字错误,因为我并没有实际运行这个脚本。除此之外,应该没问题。我在WiX工具集3.12版中使用这种脚本来安装PowerPoint加载项。请确保在WiX项目中引用WixUiExtension和WixUtilExtension。如果您想使用一些附加功能,还可以参考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>

请,如果您还有其他问题,请与我联系。

非常感谢您的回复,但在此期间,我已设法创建了一个Visual Studio安装程序项目,主要使用此处的信息,这些信息也已过时,但在编译我的安装程序时,有足够的信息以及VS中的警告和错误,我现在似乎有了一些东西,虽然它还没有被愤怒地使用过,但我认为它有助于我使用与我的外接程序相同的解决方案创建项目,因为它从那里获取信息,再次感谢