使用VS2019和WiX创建VSTO MSI安装
我不是一个普通的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中单击几下,其余的都会为您排序 希望有一个傻瓜指南在那里。。。甚至是假人的向导使用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的各种网页,但它们要么很旧,要么对我来说不够详细 我想我尝试做的有点不寻常,因为我想使用
感谢您,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中的警告和错误,我现在似乎有了一些东西,虽然它还没有被愤怒地使用过,但我认为它有助于我使用与我的外接程序相同的解决方案创建项目,因为它从那里获取信息,再次感谢