VSTO 学习笔记(十三)谈谈VSTO项目的部署

原文:VSTO 学习笔记(十三)谈谈VSTO项目的部署

一般客户计算机专业水平不高,但是有一些Office水平相当了得,尤其对Excel的操作非常熟练。因此如果能将产品的一些功能集成在Office中,将会有很好的基础。

但是由于客户安装的Office版本不一,所以VSTO项目的部署问题显得尤为重要,需要考虑很多问题。

测试代码下载

本系列所有测试代码均在Visual Studio 2010 Ultimate SP1 + Office 2010 Professional Plus x64 SP1 上测试通过

大致归纳一下,主要有以下一些情况:

1、Office版本不同

目前主要有Office 2003、Office 2007、Office 2010。

2、32位与64位的Office

目前只有Office 2010提供64位版本。

3、64位操作系统安装32位的Office

目前多出现在新上市的笔记本,很多都是Win7 64位,安装了Office 2007、2010 32位。

此外,不同VSTO项目的部署方式也不相同。主要有如下一些VSTO项目类型:

1、文档类型

如Word Document、Excel Workbook

2、AddIn类型

如Word AddIn、Excel AddIn

3、Shared AddIn类型

4、Excel自定义公式类型

下面我们就来逐个探讨一下相应的部署方案。

注意VS2010 只支持Office 2007、Office 2010,若要开发基于Office 2003的VSTO项目,请使用VS2005、VS2008。

一、待部署的项目是文档类型

1.1、使用VS 2010创建一个Excel Workbook项目:

1.2、选择Office 2007格式.xlsx:

1.3、在一个工作表中放置一个按钮:

1.4、在其单击事件中弹出一个对话框:

1.5、F5运行,会打开Excel,点击按钮弹出我们希望看到的信息:

1.6、在Debug目录下会发现生成了如下这些文件:

由于是文档类型,因此生成一个Excel工作簿很正常。有一个.vsto格式的文件很少见,它就是VSTO项目部署时的安装文件。

.vsto文件其实是一个XML文件,用文本编辑器打开可以看到具体内容:

包含了VSTO项目的具体信息,如.NET运行时版本,依赖的程序集,数字签名等信息,不要手动修改这个文件。

.NET运行时为4.0,所以客户端首先要安装.NET Framework 4.0。

.vsto的默认打开方式是Visual Studio Tools For Office Execution Engine:

该组件包含于Visual Studio Tools For Office 运行时,因此客户端若要运行VSTO程序,还需要安装Visual Studio Tools For Office 运行时。

Visual Studio 2010 Tools for Office Runtime 可以在这里下载。

1.7、我用了一个虚拟机模拟客户端,安装了.NET 4.0和Office 2010后就可以打开.vsto了:

1.8、安装成功后就可以打开Debug中的Excel文件了:

注意文档类型的VSTO项目安装后只对发布的一个文档有效(只对Debug中的Excel有效),不影响用户其他的Office文件,即文档类型项目不是全局性的。

1.9、在控制面板中可以将该VSTO项目卸载:

二、待部署的项目是Add In类型

2.1、新建一个Word Add In项目:

2.2、添加一个可视化Ribbon:

2.3、Ribbon中添加一个按钮:

2.4、单击弹出对话框:

2.5、F5运行后会打开Word:

2.6、在Debug目录中会生成一些文件:

2.7、客户端依旧需要安装.NET 4.0、Visual Studio 2010 Tools For Office Runtime才能运行该VSTO项目:

注意Add In 类型是全局性的,只要安装,用户随便打开一个Office文档都会包含该Add In。

三、Shared AddIn类型

所谓Shared AddIn,就是该插件可以被多种Office文档共用,但是一般都是针对一种Office文档开发。

3.1、创建一个Shared AddIn项目:

3.2、这里我选择只针对Excel:

3.3、设置加载属性:

3.4、默认有两个项目,一个是插件,另一个是MSI安装项目:

这里我们只谈部署,关于如何开发相关的项目请参考其他资料。

添加System.Windows.Forms的引用,然后在Connect.cs中的OnStartupComplete事件中弹出一个对话框:

3.5、设置安装项目属性:

注意TargetPlatform没有AnyCPU,故需要针对x86、x64分别编译一份MSI安装文件。

3.6、设置安装项目运行依赖组件:

这里可以设置需要.NET Framework 4.0:

在安装项目属性页中的【Prerequisites】中可以设置更多的运行依赖组件:

3.7、设置完成后编译安装项目,会生成相应的MSI安装包:

3.8、直接在安装项目右击àInstall即可以安装:

安装完后打开一个Excel就会看到我们的对话框:

四、Excel自定义公式类型

之所以把Excel自定义公式类型单独拿出来说,是因为Excel自定义公式的注册有些特殊,尤其是Excel 2010 x64。

4.1、创建一个类库项目:

4.2、写加减乘除四个函数和COM注册、反注册函数:

using System;
using System.Runtime.InteropServices;
using Microsoft.Win32;

namespace ExcelUDF
{
    [Guid("E72F44C7-DD4A-4FA2-BC32-4EA9925749DB")]
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [ComVisible(true)]
    public class ExcelUDF
    {
        public int Add(int a, int b)
        {
            return a + b;
        }

public int Subtract(int a, int b)
        {
            return a - b;
        }

public int Multiply(int a, int b)
        {
            return a * b;
        }

public int Divide(int a, int b)
        {
            return a / b;
        }

#region COM Related

[ComRegisterFunction]
        public static void RegisterFunction(Type type)
        {
            Registry.ClassesRoot.CreateSubKey(GetSubKeyName(type, "Programmable"));
            var key = Registry.ClassesRoot.OpenSubKey(GetSubKeyName(type, "InprocServer32"), true);
            key.SetValue("", Environment.SystemDirectory + @"\mscoree.dll", RegistryValueKind.String);
        }

[ComUnregisterFunction]
        public static void UnregisterFunction(Type type)
        {
            Registry.ClassesRoot.DeleteSubKey(GetSubKeyName(type, "Programmable"), false);
        }

private static string GetSubKeyName(Type type, string subKeyName)
        {
            var s = new System.Text.StringBuilder();
            s.Append(@"CLSID\{");
            s.Append(type.GUID.ToString().ToUpper());
            s.Append(@"}\");
            s.Append(subKeyName);
            return s.ToString();
        }
        #endregion
    }

4.3、我安装的是Excel x64,需要手动注册自定义公式的程序集,为此在项目属性中的Build Events中写入批处理脚本来自动注册:

%windir%\Microsoft.NET\Framework64\v4.0.30319\regasm /codebase "$(TargetPath)"

如果是Excel x86,这样注册:

%windir%\Microsoft.NET\Framework\v4.0.30319\regasm /codebase "$(TargetPath)"

部署到客户端时需要执行这个批处理脚本。

这样在每次编译成功后就会自动注册该自定义公式。

4.4、在生成管理器中配置为 x64:

4.5、在Ribbon项目中添加调用自定义公式的代码:

using Microsoft.Office.Tools.Ribbon;

namespace ExcelAddIn
{
    public partial class RibbonDemo
    {
        private void RibbonDemo_Load(object sender, RibbonUIEventArgs e)
        {

}

private void btnAdd_Click(object sender, RibbonControlEventArgs e)
        {
            Globals.ThisAddIn.Application.ActiveCell.Formula = "=Add()";
        }

private void btnSubtract_Click(object sender, RibbonControlEventArgs e)
        {
            Globals.ThisAddIn.Application.ActiveCell.Formula = "=Subtract()";
        }

private void btnMultiply_Click(object sender, RibbonControlEventArgs e)
        {
            Globals.ThisAddIn.Application.ActiveCell.Formula = "=Multiply()";
        }

private void btnDivide_Click(object sender, RibbonControlEventArgs e)
        {
            Globals.ThisAddIn.Application.ActiveCell.Formula = "=Divide()";
        }
    }

4.6、修改Ribbon项目属性,将 Excel设置为启动的扩展程序:

4.7、编译、运行,会调用Excel来打开,自动加载我们的插件ExcelAddIn:

4.8、激活自定义公式:

在【Developer】选项卡中点击【Add-Ins】,再点击【Automation】找到我们编写的自定义公式,【OK】。

4.9、此时在Excel中就可以使用我们的公式了;

小结:

1、若客户使用的主要是Office 2003,则使用VS2008开发(.NET 3.5);若客户使用Office 2007或更新版本,则使用VS2010来开发。(.NET 4.0)

2、一般的安装顺序为:

.NET Framework –> Visual Studio Tools For Office Runtime à MSI或.vsto

3、安装之前最好将原来版本卸载,若.vsto出现无法安装的情况,则可以使用Mage.exe清理一下缓存再尝试安装。

命令行下执行:mage -cc

Mage.exe是Windows SDK中的一个小工具,安装完Windows SDK后默认位于:

C:\Program Files (x86)\Microsoft SDKs\Windows\xx\Bin     àWindows x64

C:\Program Files\Microsoft SDKs\Windows\xx\Bin     àWindows x86

其中xx是Windows SDK的版本号,如v6.0A、v7.0A、v7.1等。

使用VSTO开发建议客户端安装Office 2007或更新版本,因为VSTO本身就是对Office 2007或更新版本量身定制的。Office 2003由于历史遗留问题,难以适应新架构。

对此需要引导客户,虽然客户是上帝,但是如果能说服客户升级Office,则对用户体验和项目后期的升级维护有显著的好处。

时间: 2024-09-29 09:28:43

VSTO 学习笔记(十三)谈谈VSTO项目的部署的相关文章

VSTO学习笔记(二)Excel对象模型

原文:VSTO学习笔记(二)Excel对象模型 上一次主要学习了VSTO的发展历史及其历代版本的新特性,概述了VSTO对开发人员的帮助和效率提升.从这次开始,将从VSTO 4.0开始,逐一探讨VSTO开发中方方面面,本人接触VSTO时间不长,也是一次尝试.鉴于Excel在整个Office家族中的重要地位,故先从Excel开始介绍,后续内容会陆续介绍Word.PowerPoint.Outlook.InfoPath等.由于VSTO 4.0建立在Office 2010基础之上,先介绍一下Office

VSTO学习笔记(四)从SharePoint 2010中下载文件

原文:VSTO学习笔记(四)从SharePoint 2010中下载文件 上一次我们开发了一个简单的64位COM加载项,虽然功能很简单,但是包括了开发一个64位COM加载项的大部分过程.本次我们来给COM加载项添加一些功能:从SharePoint 2010的文档库中下载一个Excel文档到本地. 示例代码下载 本系列所有示例代码均在 Visual Studio 2010 Ultimate RC + Office 2010 Professional Plus Beta x64 上测试通过. 1.首先

VSTO学习笔记(一)VSTO概述

原文:VSTO学习笔记(一)VSTO概述 接触VSTO纯属偶然,前段时间因为忙于一个项目,在客户端Excel中制作一个插件,从远程服务器端(SharePoint Excel Services)上下载Excel到本地打开,用户编辑后再上传回服务器端.当时工期紧迫,临时查了些资料,用VSTO + Excel COM API完成.正因为这个项目,我发现了VSTO的强大功能与潜力,决定抽出一些时间来好好研究下. 示例代码下载 本系列所有示例代码均在 Visual Studio 2010 Beta 2 +

VSTO 学习笔记(六)在 Excel 2010中使用RDLC报表

原文:VSTO 学习笔记(六)在 Excel 2010中使用RDLC报表 Excel具有强大的图表显示.分析功能,这点毋庸置疑,但是如果将常规MIS系统中的数据以报表的形式在Excel中显示,却并不那么容易.在VSTO中,我们可以借助RDLC报表组件来满足这种需求. 示例代码下载 本系列所有示例代码均在 Visual Studio 2010 Ultimate RTM + Office 2010 Professional Plus Beta x64 下测试通过 注:本次数据库使用的是 SQL Se

VSTO学习笔记(十五)Office 2013 初体验

原文:VSTO学习笔记(十五)Office 2013 初体验 Office 2013 近期发布了首个面向消费者的预览版本,我也于第一时间进行了更新试用.从此开始VSTO系列全面转向Office 2013平台,即VSTO 5.0. 本系列所有测试代码均在Visual Studio 2012 Ultimate RC + Office 2013 Professional Plus x64 Preview 上测试通过 为了配合Windows 8,微软的很多软件风格都逐渐Metro化,Office作为拳头

VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式

原文:VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式 Excel包含很多公式,如数学.日期.文本.逻辑等公式,非常方便,可以灵活快捷的对数据进行处理,达到我们想要的效果.Excel的内置公式虽然强大,但是在ERP等系统中,往往需要进行很多业务上的计算,如收发存台账.指定年.月.部门的消耗查询等,都是需要从数据库中查询的,且和业务紧密相连.这时仅仅依靠Excel的内置公式就不够了,需要添加自定义的公式来进行这些业务计算. 测试代码下载 本系列所有测试代码均在Visual St

VSTO学习笔记(三) 开发Office 2010 64位COM加载项

原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(Automation Executables) 2.Office加载项(COM or Excel Add-In) 3.Office文档代码或模板(Code Behind an Office Document or Template) 4.Office 智能标签(Smart Tags) 本次我们将学习使

VSTO 学习笔记(十)Office 2010 Ribbon开发

原文:VSTO 学习笔记(十)Office 2010 Ribbon开发 微软的Office系列办公套件从Office 2007开始首次引入了Ribbon导航菜单模式,其将一系列相关的功能集成在一个个Ribbon中,便于集中管理.操作.这种Ribbon是高度可定制的,用户可以将自己常用的功能进行单独设置,提高工作效率.但是由于Office 2003时代用户的操作习惯已经养成,结果到了Office 2007很多菜单.按钮都找不到了,着实有些尴尬.经过一段时间的适应,相信大多数用户已经习惯Ribbon

VSTO学习笔记(五)批量编辑Excel 2010 x64

原文:VSTO学习笔记(五)批量编辑Excel 2010 x64 近期因为工作的需要,经常要批量处理大量的Excel文件,如果纯手工一个个修改,非常的麻烦,于是写了这么一个帮助类,希望能对你有所帮助.里面很多方法可以进一步推广,增减适当的参数,部分方法用到了C# 4.0新特性,如果需要调试,请安装Visual Studio 2010. 示例代码下载 本系列所有示例代码均在 Visual Studio 2010 Ultimate RC + Office 2010 Professional Plus