开发了vsto,客户那边也有一些反映插件安装失败或者加载不上的情况。于是我下定决定再理解下vsto的工作机制,如下图:

   如上图所示,我把vsto的解决方案分为两部分,一部分是vsto Add-ins,另外一部分是Microsoft  Office  Applications。它们之间是如何交互的呢?要回答这个问题,必须对这两部分有一定的认识。首先vsto Add-ins是我们用c#开发的托管代码,office是基于com产品。微软提供了PIA(程序互操作集),它作为.net调用com的一个接口。它们之间的具体交互图,见下一篇。总之,vsto add-ins通过PIA,调用office的对象模型以及订阅事件:

 
  1. Globals.WordApplication.DocumentChange += new ApplicationEvents4_DocumentChangeEventHandler(WordApplication_DocumentChange);

  2. Globals.WordApplication.DocumentOpen += new ApplicationEvents4_DocumentOpenEventHandler(WordApplication_DocumentOpen);

  3. Globals.WordApplication.DocumentBeforeClose += new ApplicationEvents4_DocumentBeforeCloseEventHandler(WordApplication_DocumentBeforeClose);

  4. (Globals.WordApplication as ApplicationEvents2_Event).Quit += new ApplicationEvents2_QuitEventHandler(() => { Service.StopRemotingService(3); });

所谓office的对象模型,就是操作office的那些对象,下图显示了 Word 对象模型层次结构中这些对象的一个视图。

    

vsto addin是如何加载的?它的执行过程是什么?

对照文章开头的那个图(标出了顺序),我们来理一理:

1、office应用程序查看注册表,通过注册表得知vsto部署及应用清单文件。

2、office应用程序加载VSTOEE.dll,这是非托管的程序集,它属于vsto runtime的一部分。它的作用是什么呢?为vsto runtime做一些准备工作,比如说,检查runtime的版本等。

3、VSTOEE.dll 加载 VSTOLoader.dll,这是vsto runtime的另一个非托管程序集(实现了com插件的接口,因为我们知道,实现office加载项,本质上是实现com插件的接口)。它做了两件事情。

3.1 加载了vsto runtime中的一些托管程序集。

3.2 加载了.net framework。

4、vsto runtime 创建了一个app domain,加载vsto addin Assembly

经过这4步,office就可以和vsto addin快乐地交互了。

附:平常客户使用过程中的一些问题,我总结了如下:

1、在反复安装卸载过程中出现,安装或者卸载都可能出现如下问题,解决办法,安装vc++ 2010,有的情况下可以解决,有的时候解决不掉,不知道why。

2、不知道什么情况下出现的错误,不过极少出现:

解决方法:

3、未将对象引用到实例:

从上图可以看出,追踪到底层,发现framework中的异常。

解决方法,安装.netframework 3.5 sp1 ,这个不一定能解决问题,具体哪出问题了,还不明确,毕竟是极少数的用户有这问题,我初步怀疑是操作系统的问题,因为我们国家的很多人都用盗版的。

4、已经安装了另一个版本:

解决方法,这个好解决(与缓存有关系),一般药到病除:

5、操作office时报错:

解决方法:

"D:\Microsoft Office 2003\OFFICE11\EXCEL.EXE"  /regserver

6、加载项出现错误:

winxp,  office 2007

vsto是通过C:\Program Files\Common Files\microsoft shared\VSTO\10.0下的VSTOInstaller.exe进行安装的。双击VSTOInstaller.exe报无法找到入口的错误。后来发现XP等NT5.x系统安装时都报【VSTOInstaller.exe无法定位程序输入点GetFileVersionInfoExW】:

原因是自动下载的runtime有乌龙,说好支持XP,但其实里面用到了NT6.x才有的API,比如上面那个GetFileVersionInfoExW,所以要么【发布>系统必备】中不要勾【创建用于安装系统必备组件的安装程序】,手动下载XP可用的runtime安装(版本10.0.50903,而自动下载的版本以及下载中心的版本都比这个高,都有乌龙),下载地址:

http://download.microsoft.com/download/C/0/0/C001737F-822B-48C2-8F6A-CDE13B4B9E9C/vstor_redist.exe

或者从这个链接下载:https://pan.baidu.com/s/1BtMlUdQRO4-1rOfp9-6Vhw 提取码:9btp

需要注意:卸载错版后相关文件也许会遗留,在【C:\Program Files\Common Files\Microsoft Shared\VSTO\10.0\】,这样你就算装了对版,文件也不会变,问题依旧,所以安装对版之前需检查并清空上述目录。

以上是在实际当中经常出现的问题。我做了汇总。出了这些插件安装的问题,其实还有一类问题,是word版本的问题。比如插件在office 2013 的某些低版本下运行,可能会出问题。这时候把对应的升级包打上,问题会迎刃而解。

深入理解vsto,开发word插件的利器相关推荐

  1. 接触vsto,开发word插件的利器

    研究word插件有一段时间了,现在该是总结的时候了. 首先咱们来了解下什么是vsto?所谓vsto,就是vs面向office提供的一个开发平台.一个开发平台至少包含两个要素:开发工具(sdk)和运行环 ...

  2. Excel催化剂开源第32波-VSTO开发的插件让WPS顺利调用的方法-注册表增加注册信息...

    VSTO插件开发完成后,鉴于现在WPS用户也不少,很多时候用户没办法用OFFICE软件,只能在WPS环境下办公,VSTO开发的插件,只需增加一句注册表信息,即可让WPS识别到并调用VSTO开发的功能, ...

  3. VSTO开发PPT插件将PPT导出成图片

    编辑器Visual Studio 2022 官网下载地址 https://visualstudio.microsoft.com/zh-hans/ 安装参考 VSTO开发Powerpoint插件 htt ...

  4. word2007插件开发经验备忘1--如何开发word插件

    最近做了word2007的插件开发(VBA开发).虽然还没有完全写完,但是感觉有必要写一些东西了,于是就记录下来.... office的开发分为程序级开发和文档级开发,程序集开发的典型代表就是传说中的 ...

  5. VSTO中Word的查找方式

    VSTO中Word的查找方式 前言 使用C#在VSTO开发Word插件的过程,经常需要对文档中的内容进行查找和替换.在Word中进行文本的查找替换,和一般对纯文本的查找替换却不太一样.因为Word文档 ...

  6. C#开发Word控件

    简介 本文简要描述了利用C#开发一个Word插件的流程方法.实现一个简单的发送邮件的功能.如下图所示: 点击发送邮件按钮,则将文本内容发送到邮箱. 新建工程 切换到Visual C#,选择office ...

  7. vsto下开发wps插件

    我们要开发wps插件了.之前用vsto开发过word插件,我也讲过c#下如何开发wps插件(有点繁琐).如果采用c#从头再开发wps插件,那么开发出来的office加载项就会出现两个.我们要实现的wp ...

  8. 个人用户永久免费,可自动升级版Excel插件,使用VSTO开发,Excel催化剂功能第9波-数据透视表自动设置...

    对于数据分析工作者和深度Excel用户来说,数据透视表的使用频率之高是毋庸置疑的.透视表可谓投入少产出大,给它数据源,最终就可以轻松地得到想要的数据汇总.报表.结合数据透视图.条件格式等可视化方式,快 ...

  9. 个人用户永久免费,可自动升级版Excel插件,使用VSTO开发,Excel催化剂功能第15波-接入AI人工智能NLP自然语言处理...

    上回提到现在是概念化时代,马云爸爸们天天演讲各样的概念,IT世界也在讲ABC时代(A-AI人工智能,B-BigData大数据,C-Cloud Computing云计算),在2017年,大把大佬们都大谈 ...

  10. 个人用户永久免费,可自动升级版Excel插件,使用VSTO开发,Excel催化剂功能第12波-快速生成、读取、导出条形码二维码...

    根据指定的内容生成对应的条形码或二维码,在如今移动互联网时代,并不是一件什么新鲜事,随便百度一下,都能找到好多的软件或在线网站可以帮我们做到,但细想一下,如果很偶然地只是生成一个两这样的图形,百度一下 ...

最新文章

  1. sqlserver 去除 重复列 [行]
  2. python绘制如下图形、小三角形边长20_在编程中发现数学之美——使用Python小龟绘制多边形...
  3. HMAC(2)哈希运算消息认证码HMAC
  4. Python第三、四种数据类型——List(列表) and Tuple(元组)
  5. 在同一网段内运行同一命令_一高楼两层同时起火!同一天内,全国竟发生数起“高层火灾”!...
  6. 电脑看不到光驱盘符,应该如何解决
  7. arcgis工具python源码_面向Arcgis的python脚本编程_数据
  8. git 修改默认分支为main_Git:基本操作
  9. 3-7 DNA序列(DNA Consensus String, ACM/ICPC Seoul 2006, UVa1368)
  10. mysql schema 保存数据_如何在mysql数据库中保存apache spark schema输出
  11. DSA数字签名原理及python实现
  12. HTML 图书销售排行榜
  13. linux系统的负载
  14. 光年:光走一年的距离
  15. 【Javascript的基本知识——数据的流程和流程的切割】
  16. 《Fluent Python》读书笔记-2.5
  17. 关于PhotoShop中保存CMYK格式TIFF文件在GDI+错误地显示颜色的问题解决方法
  18. 观2007年中常用软件大盘点 一文后的个人软件盘点
  19. Linux中系统进程的详细管理
  20. kakfa的维护:Brock停止

热门文章

  1. python生成序列_python 之 生成序列号
  2. matlab实用教程 答案,含答案《matlab实用教程》.doc
  3. mysql实体监听器_监听器模式(Listener)
  4. 一道经典的C++题,关于分钱的问题,适合新手阅读(黑客X档案论坛题目)
  5. 计算机flash教案,flash教学计划
  6. python中的数据存储-json
  7. WordPress漏洞扫描器wpscan
  8. Android 中文 API (29) —— CompoundButton
  9. 如何查看一个网页源代码的最后更新时间
  10. bluem2.com引擎mysql,蓝色bluem2引擎登录器配置教程详细,bluem2列表格式