使用自动更新功能部署 Office 2003 解决方案






4.17/5 (4投票s)
一种无需用户干预即可将 Office 2003 解决方案的未来更新/升级无缝发送给终端用户的方法。
引言
我碰巧读过许多文章和帖子,说针对 Office 2003 的 VSTO 加载项无法使用 ClickOnce 技术进行自动更新。本文的目标是提供一种方法,可以将 Office 2003 解决方案的未来更新/升级无缝地发送给终端用户,而无需任何用户干预。本文旨在提供一个端到端的演练,以在您的 Office 2003 VSTO 解决方案中实现此功能。Office 2007 及更高版本支持 ClickOnce 技术,并可以自动处理自动更新。
背景
Office 2003 解决方案可以通过两种方式部署。
- 发布向导 - 发布向导使您可以将 Visual Studio Tools for Office 解决方案部署到网站、网络文件共享或本地计算机。它会在第一次部署期间自动为解决方案创建应用程序清单和部署清单,或更新现有清单。
- Visual Studio 安装项目 - 当您使用 Visual Studio Tools for Office 创建加载项项目时,一个安装项目会自动添加到解决方案中。加载项的安装项目会生成一个 Windows Installer (.msi) 文件,该文件用于配置目标计算机并安装加载项。
这两种方法各有优缺点。在深入探讨之前,让我们先了解成功部署 Office 2003 解决方案需要什么。
- 准备终端用户计算机 – 您的用户必须安装一些必备组件才能运行解决方案。因此,您必须检查所有必需的必备组件是否已安装在终端用户计算机中。如果没有,您必须将其安装在终端用户计算机中。此特定要求只能使用“安装”项目实现。有关更多信息,请参阅此链接。
- 授予安全信任 – 您必须更新每个终端用户的安全策略,以允许 Visual Studio Tools for Office 解决方案运行。作为开发人员,当您创建 Visual Studio Tools for Office 解决方案时,您的本地安全策略会自动更新,以允许项目中的代码运行。所需的权限集是完全信任。Office 解决方案不运行具有部分信任或无信任的托管代码扩展。代码访问安全策略工具 (Caspol.exe) 可用于通过命令行授予安全信任。或者,也可以使用 .NET Framework 配置工具通过图形用户界面授予安全信任。
- 创建注册表项 – 您还必须在每个客户端计算机上创建所有必需的注册表项。有关更多信息,请参阅此链接。
谈到部署方法,“发布
”方法的主要优点是它可以自动支持 Office 2003 解决方案的未来更新/升级。但是,此方法无法执行上述任何步骤,因为发布向导假定用户已具备先决条件。而“安装
”项目能够执行上述所有步骤,但不支持自动更新/升级。每次进行更改时,您都必须分发新的 MSI 文件。
这里的方法将结合上述两种方法(发布向导和 VS 安装项目)来实现我们想要的目标,即向终端用户计算机发送 Office 2003 解决方案的自动更新。以下部分将引导您完成此方法。
逐步演示
本演练假设您正在使用 Microsoft Visual Studio 2008 和 .NET Framework 3.5 创建 Office 2003 解决方案。此处演示的方法将创建 Excel 2003 解决方案并将其部署到网站。
创建 Excel 2003 加载项项目
-
- 上述操作将创建一个包含两个项目的解决方案。一个将是实际的加载项项目,另一个将是安装项目。在文本编辑器(如“记事本”)中打开 Excel2003AutoUpdateDemo.csproj 文件,并在
<PublishUrl>
标签下方添加以下 XML 元素。<UpdateUrl>http://yourproject.yoursite.com/</UpdateUrl>
- 现在,让我们为该加载项添加一些非常基本的功能来运行和测试此示例。将以下代码添加到 ThisAddin.cs 文件中的“
ThisAddIn_Startup
”方法内部MessageBox.Show("Version: 1.0.0.1");
增强安装项目
本节中的一些说明取自此处。
- 将先决条件添加到安装项目 - 添加引导程序将安装的先决条件。后续步骤将介绍如何添加启动条件。
- 在解决方案资源管理器中,右键单击
Excel2003AutoUpdateDemo
安装,然后单击属性。 - 在“属性页”对话框中,单击“先决条件”。
- 在先决条件列表中,选择以下项
- Windows 安装程序 3.1
- .NET Framework 3.5 SP1
- Microsoft Office 2003 主互操作程序集
- Microsoft Office 2007 主互操作程序集
- Microsoft Visual Studio 2005 Tools for Office 第二版运行时
- Visual Studio Tools for the Office system 3.0 Runtime Service Pack 1
- 单击“确定”两次。
- 在解决方案资源管理器中,右键单击
- 添加自定义操作以授予程序集信任
使用提供的自定义操作项目授予自定义程序集信任。此项目最初取自 MSDN 示例,并根据我们的需要进行了重写。此自定义操作将向特定网站上存在的所有代码授予完全信任。- 添加自定义操作项目
- 下载本文中嵌入的
SetSecurity
项目。 - 在解决方案资源管理器中,右键单击
Excel2003AutoUpdateDemo
。 - 指向快捷菜单上的“添加”,然后单击“现有项目”。
- 选择
SetSecurity
项目。 - 点击“确定”。
- 在解决方案资源管理器中,右键单击
SetSecurity
项目,然后单击“生成”。
- 下载本文中嵌入的
- 将自定义操作项目的主输出添加到安装项目。这使得 Windows Installer 文件能够运行编辑应用程序清单的自定义操作。
- 在解决方案资源管理器中,右键单击
Excel2003AutoUpdateDemo
。 - 指向快捷菜单上的“视图”,然后单击“自定义操作”。
- 在“自定义操作”编辑器中,右键单击“自定义操作”,然后单击“添加自定义操作”。
- 在“查找位置”列表中,单击“应用程序文件夹”,然后单击“添加输出”。
- “添加项目输出组”对话框打开。
- 在“项目”列表中,单击
SetSecurity
。 - 从输出类型列表中选择“主输出”,然后单击“确定”。
- 验证 SetSecurity (Active) 的主输出是否已添加到安装项目的主输出列表中。
- 在解决方案资源管理器中,右键单击
- 为
Install
方法添加自定义操作数据- 在“自定义操作”编辑器中,展开“安装”。
- 右键单击 SetSecurity (Active) 的主输出,然后单击“属性窗口”。
- 在“属性”窗口中,将
CustomActionData
属性设置为以下字符串。将其作为单个长字符串输入
/site="yourproject.yoursite.com" /solutionCodeGroupName="YourProjectName" /solutionCodeGroupDescription="Code group for YourProjectName" /allUsers=[ALLUSERS]
- 为
Rollback
方法添加自定义操作数据- 在“自定义操作”编辑器中,展开
Rollback
。 - 右键单击 SetSecurity (Active) 的主输出,然后单击“属性窗口”。
- 在“属性”窗口中,将
CustomActionData
属性设置为以下字符串
/solutionCodeGroupName="YourProjectName"
- 在“自定义操作”编辑器中,展开
- 为
Uninstall
方法添加自定义操作数据
- 在“自定义操作”编辑器中,展开
Uninstall
。 - 右键单击 SetSecurity (Active) 的主输出,然后单击“属性窗口”。
- 在“属性”窗口中,将
CustomActionData
属性设置为以下字符串/solutionCodeGroupName="YourProjectName"
- 在“自定义操作”编辑器中,展开
- 添加自定义操作项目
- 向 Windows Installer 文件添加启动条件
当用户运行 Setup.exe 时,Windows Installer 会检查先决条件,并在必要时安装它们。或者,用户可以双击 .msi 文件来安装解决方案。在这种情况下,先决条件不会安装,解决方案也无法运行。在其他情况下,设置可能会失败,因为缺少所需的资源;例如,自定义操作可能需要 .NET Framework。本节向您展示如何使用“启动条件”编辑器向 .msi 文件添加启动条件,以防止在未安装某些依赖项时进行安装。- 查看“启动条件”编辑器
- 在解决方案资源管理器中,右键单击
Excel2003AutoUpdateDemo
。 - 指向快捷菜单上的“视图”,然后单击“启动条件”。
- 在解决方案资源管理器中,右键单击
- 为 VSTO 2005 SE 运行时添加启动条件
- 在“启动条件”编辑器中,右键单击“目标计算机上的要求”,然后单击“添加注册表启动条件”。
- 选择新添加的搜索条件,“搜索
RegistryEntry1
”。 - 将搜索条件重命名为 搜索 VSTO 2005 SE 运行时。
- 在“属性”窗口中,将“属性”的值更改为
VSTORTVERSION
。 - 同样在“属性”窗口中,将
RegKey
的值设置为以下字符串
Software\Microsoft\vsto runtime Setup\v2.0.50727
- 将
Root
属性设置为vsdrrHKLM
,并将Value
属性更改为Update
。 - 选择新添加的启动条件,
Condition1
。 - 将其重命名为 如果未安装 Visual Studio 2005 Tools for Office SE 运行时,则显示消息。
- 在“属性”窗口中,将
Condition
属性的值更改为以下字符串
VSTORTVERSION >= "#3"
- 将“消息”属性的值更改为 未安装 Visual Studio 2005 Tools for Office SE 运行时。请运行 Setup.exe。
- 查看“启动条件”编辑器
- 从安装项目中移除加载项的主输出
此步骤很重要,因为您的解决方案程序集无需与安装程序文件打包,也无需安装在客户端系统上。您的解决方案程序集和依赖文件将发布到网站,未来的更新也将发布到同一网站。只有发布向导生成的应用程序清单需要包含在安装项目中。
- 展开
Excel2003AutoUpdateDemoSetup
项目 - 右键单击“Excel2003AutoUpdateDemo (Active) 的主输出”并单击“移除”以将其移除。
- 展开
- 将加载项项目的应用程序清单添加到安装项目
可以通过发布加载项的初始版本来生成应用程序清单。发布向导将同时生成部署清单和应用程序清单。要生成应用程序清单并将其添加到安装项目,请执行以下操作- 右键单击
Excel2003AutoUpdateDemo
项目,选择“属性”并转到“发布”选项卡。 - 将“发布位置”更改为系统中的临时本地文件夹。
- 单击“立即发布”按钮。
- 发布操作成功后,转到您选择的临时本地文件夹。您应该会看到以下文件夹结构
- 进入
Excel2003AutoUpdateDemo_1.0.0.0
项目,您应该会看到以下文件 - 右键单击
Excel2003AutoUpdateDemoSetup
项目,选择“添加”,然后选择“文件”。在“浏览”对话框中,选择 Excel2003AutoUpdateDemo_1.0.0.0\ Excel2003AutoUpdateDemo.dll.manifest 文件,然后按“确定”添加此文件。
- 右键单击
测试解决方案
- 构建解决方案。
- 将发布加载项时生成的文件和文件夹移动到网站,即 http://yourproject.yoursite.com。
- 生成
Excel2003UpdateDemoSetup
项目以创建安装程序文件。 - 将 setup.exe 和 Excel2003UpdateDemoSetup.msi 文件分发到另一台将要测试加载项的计算机。
- 在测试计算机上运行 setup.exe 以安装加载项。
- 打开 Excel,您将看到以下弹出窗口
- 再次,转到您的开发计算机并打开 ThisAddin.cs 文件,然后更改“
ThisAddIn_Startup
”方法中的代码MessageBox.Show("Version: 1.0.0.2");
- 构建解决方案。
- 右键单击
Excel2003AutoUpdateDemo
项目,选择“属性”并转到“发布”选项卡。 - 将“发布位置”更改为系统中的临时本地文件夹。
- 单击“立即发布”按钮。
- 发布操作成功后,转到您选择的临时本地文件夹,复制所有内容并将其移动到同一网站,即 http://yourproject.yoursite.com。现在,您的网站中的文件夹结构应如下图所示
- 转到开发计算机,然后关闭并再次打开 Excel。加载项将自动更新到最新版本,并弹出以下消息框
摘要
Visual Studio Tools for Office 包含一个名为 VSTOLoader
的组件,它实际上负责将 VSTO 加载项加载到 Excel 中。它会进入注册表查找加载项列表,并通过名为“Manifest
”的注册表项找到加载项的所在地。如果此项指向应用程序清单,它将直接从该位置加载加载项。如果此项指向部署清单,它将读取部署清单以找到应用程序清单,然后加载实际的加载项,在本例中该加载项位于网站上。因此,如果我们不断更新网站上的部署清单,Microsoft Excel 将始终加载其指向的应用程序清单。
历史
- 版本 1.0 - 2010 年 5 月 5 日