我不是常规的VS开发人员
我有一个VS2010项目,可为Outlook创建VSTO加载项并使用Click-Once安装
尽管即使在最新的Office 365上仍然可以使用,但VS2010现在已经步履维艰,并且“单击一次”方法多年来困扰着我,我现在想创建MSI版本的安装程序。
我已经与WiX一起安装了VS2019社区,我已经将项目的副本转换为VS2019,但它似乎仍在运行
我已经阅读了许多有关创建WiX的网页,但是它们要么已经很旧,要么对我来说不够详细。
我想我要做的是有点不寻常,因为我想使用最新的VS与.NET4和VSTO2010创建VSTO插件MSI。
虽然我已经掌握了所需的工具,但细节还是很棘手,除非确定版本/路径/ reg条目/依赖项等完全正确,否则我确信它不会起作用
安装程序具有DotNetFX40Client VSTOR40 WindowsInstaller3_1的文件夹时,我当前单击的按钮
在此处https://jsfiddle.net/j4bu6923/3/
使用信息我不太清楚要插入什么XML条目,如果缺少某些东西如何安装它,我也看到过Office2007等的检查,但是我不知道如何将其绑定到特定的Office版本。即,现在它仍然可以在O365中使用
很抱歉出现混乱的帖子,但显然单击一次清单中有很多信息,但我不太确定如何从那里转到工作的msi安装程序
例如在VS2019中调试和发行版都重建了项目,例如,看起来好像安装程序需要的那些obj文件夹中没有清单文件
所有这些都是错误的,“单击一次”仅是工作室中的几次单击,它会为您整理其余部分
希望那里有一个假人指南...甚至一个假人指南!
谢谢
答案 0 :(得分:1)
VSTO 2010是运行时的最新版本。不过,您可以将项目更新为更高版本的.NET Framework。
您无需在安装程序中包含完整的VSTO 2010可再发行组件。以我的经验,如果仅将目标文件夹中的运行时程序集包括在安装程序包中,则外接程序运行得很好。
您声明无法在obj文件夹中找到清单文件。但是,在成功编译加载项之后,您应该至少在目标文件夹中找到加载项的dll,其vsto文件,清单和所有引用的dll。您将需要在安装程序中包括所有这些文件。如果找不到它们,则说明您在错误的文件夹中搜索,或者在编译过程中发生了错误。
维护和开发WiX工具集的团队做得很好。但是,WiX的文档没有跟上该工具集。另外,有关创建WiX安装脚本的许多问题实际上是有关Windows Installer本身的功能以及在特定情况下需要执行的操作的问题。这就是为什么提出一个可行的解决方案可能很繁琐的原因。
在下文中,我将为您提供我提出的安装脚本的结构示例。请注意,由于我实际上没有运行此脚本,可能会有一些错别字。除此之外,应该没问题。我将这种脚本与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>
请让我知道是否还有其他问题。