相关文章:
浅谈Excel开发(1) Excel开发概述
浅谈Excel开发(二) Excel 菜单系统
浅谈Excel开发(三) Excel 对象模型
前面几篇文章讲解了Excel开发的几个比较主要的也是比较重要的方面,比如菜单系统,Excel对象模型,自定义函数,RTD函数,异步自定义函数,用户自定义任务面板等,在实际开发中我们还会遇到各种“千奇百怪”的问题,以及开发中的一些注意事项和技巧等,后面有空我会写文介绍。当我们的Excel外接应用程序开发好了之后,需要给用户使用,这就涉及到了应用程序的安装与部署,本文就简要介绍下Excel项目的安装和部署。
和一般的.NET 中的Windows Form程序不同,Excel开发通常是一种插件式的开发机制,它需要借宿在Excel上,并通过调用Excel的API来实现特定的业务逻辑。宿主Excel在运行的时候,会根据当前用户以及Excel版本信息,读取注册表特定位置,以查找在本机当前用户下面注册的插件信息,然后逐个加载。这里面就涉及到了和安装部署相关的一些需要考虑的问题了。
一 插件安装部署时需要考虑的问题
Excel在安装部署的时候,需要考虑一些问题:
插件的类型,是Document Level,还是Application Level,是基于VSTO开发还是Shared Add-in技术开发。这个对于安装部署有较大影响。
判断待部署机器的位数,32位和64位机器Excel的插件信息在注册表的位置有所不同,对于64位操作系统,某些内容会写到\Wow6432Node\节点下。
待部署用户的机器上是否安装有Excel,Excel的版本是多少,Excel的位数是多少,如果是安装的Office 2003 是否安装有SP3 补丁,以及补丁版本号是多少。这里需要说明的是,从Office 2010开始,Excel分为32位和64位版本,这两个版本的dll在一般情况下是不能够兼容的,在应用开发中,如果我们的插件决定兼容这两个版本,那么还需要对于不同的目标机器需要分别编译发布相应的dll;如果不兼容,则还需要判断Office的版本。
如果是使用.NET 技术开发,需要判断用户机器上是否安装有.NET Framework以及Framework的版本。
如果用户安装的是Excel 2003,如果用到了某些功能,需要判断用户是否安装了相应的补丁,如果没有安装,需要静默安装。
安装完成后,相应的权限设定,比如对于某些目录,需要添加到安全目录,这样Excel在打开自己的带有宏文件的目录时不会提示不安全。
在部署插件的时候,以上问题在安装部署的时候是需要进行考虑,并通过代码的方式获取的。还有一些条件,比如用户有可能是安装的绿色版或者不完全版的Excel,这些奇奇怪怪的问题我们都需要考虑。 但是如果考虑到了以上条件,插件的安装和部署应该可以达到90%以上。
要了解Excel插件的安装部署我们需要清楚Excel是如何加载插件的,下面介绍下Excel插件的加载和运行机制。
二 Excel插件的加载及运行机制
这里以VSTO Add-in为例,Shared Add-in原理和机制类似。
当我们使用Office开发工具来开发Add-in的时候,我们实际上是创建了一个用托管代码编写的能够被Office加载的程序集(assembly)。程序集加载之后,Add-in就能够响应Office应用程序发起的事件了。Add-in也可以调用Office开放的对象模型来扩展其功能,当然也可以使用.NET 类库中提供的各种功能。
程序集和Office的Com组件进行交互是通过Office提供的称之为Primary Interop Assembly (PIA)来实现的。
如果有多个VSTO创建的Add-in部署到了目标机器,在Office启动的时候,每一个Add-in会被加载到各自不同的AppDomain中,这样极大地提高了插件的稳定性,意味着如果有一个Add-in工作不正常,不会影响其他Add-in的功能,其次,当Office应用程序关闭的时候,所有的Add-in的程序集都可以从内存中清除。
虽然Add-in的程序集是开发中我们最要关注的东西,但是Office在发现和加载我们编写的Add-in的时候,其他几个组件和部分也发挥着重要作用。这对熟悉Add-in的安装和部署有着很重要的作用。
2.1 注册表项
Excel 通过一系列的注册表项来加载插件。在部署的时候,我们也需要将我们插件的相关信息写入到目标机器的注册表中。通常在Vista及以上版本的Windows中对注册表的操作需要获得管理员权限。
a) 在部署的时候,我们需要确定是部署到CurrentUser还是LocalMachine节点下。