上一篇,我们完成了具体的开发工作,但是最终必须得部署到客户机器上。所以,部署方面,我花费了一些时间去研究,现在总结下。上一篇中,我为什么建议开发人员安装wps专业版呢?因为装了专业版,方便我们开发,安装过程中会顺便把 office PIA安装到GAC中。否则,我们还得手动安装PIA,这个过程极其繁琐。

啥是PIA?说白了,就是office 或者wps提供给开发者的接口,学名叫互操作集。也就是说c#代码与office组件之间的交互。互操作集通过api,公布了word对象模型,供我们代码使用。

如果说客户机器上没有PIA,怎么安装呢?首先我们开发人员得自己生成PIA,然后部署到客户机器上,那么当前任务就是如何生成PIA?

打开vs 命令行:

执行TlbImp命令:

其实这一步是从com中导出到公共语言运行库程序集,它们保持了相同的方法定义。注意:etapi.dll 是wps的Excel组件,wpsapi.dll 是wps的word组件,会生成word.dll,根据自己需要导出,还有一个ksoapi.dll 是wps office组件,会生成office.dll。

导出后,接下来需要添加到GAC中。

什么是GAC?从程序的角度理解,那就是共享的程序集池。当然微软开发的很多dll,它的共享程度是最高的,所以把那些dll直接安装到GAC中了。我们刚才生成的word.dll要加入GAC,还必须得满足一个条件:强签名。这个导出的word.dll没有签名,怎么办呢?想办法签名吧。

经过以下3步即可签名:

1、第一步:生成随机密钥对
sn -k wpsAddIn.snk
2.首先采用反汇编工具ildasm生成中间语言。
  ildasm word.dll /out:word.il
生成的结果包括myTest.il文件和myTest.res文件
3.采用汇编工具ilasm重新生成我们自己的dll文件
 ilasm /dll /res:word.res /key:wpsAddIn.snk word.il /out:word1.dll

签了名后,通过下面批处理方式添加到GAC中:

@SET GACUTIL="C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\gacutil.exe"
%GACUTIL% -i D:\mywork\word.dll
如果用户安装的是wps 2016的专业版,那么上面的步骤全部可以省略。注意:要安装.net framwork,我们是用c#开发的插件。
接下来要做的事情是
1、注册我们自己写的com组件
2、把插件信息写入注册表
我写了个批处理文件:

@echo off

echo import reg

@set baseDir="D:\mywork\WordAddInTest2010\WpsWordAddin\WpsWordAddin\install\bin"

regedit /s D:\mywork\WordAddInTest2010\WpsWordAddin\WpsWordAddin\install\bin\myreg.reg

C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm %baseDir%\Debug\WpsWordAddin.dll /tlb:%baseDir%\Debug\WpsWordAddin.tlb
@SET GACUTIL="%baseDir%\NETFX 4.0 Tools\gacutil.exe"
Echo Install the dll into GAC
%GACUTIL% -i %baseDir%\Debug\WpsWordAddin.dll
%GACUTIL% -i %baseDir%\Debug\Word.dll
%GACUTIL% -i %baseDir%\Debug\Office.dll

pause

myreg.reg文件:

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\Word\Addins\WpsWordAddin.WPSWord2016]
"FriendlyName"="WpsWordAddin"
"Description"="wps word示例"
"LoadBehavior"=dword:00000003
"CommandLineSafe"=dword:00000001
[HKEY_CURRENT_USER\Software\Kingsoft\Office\WPS\AddinsWL]
"WpsWordAddin.WPSWord2016"=""

插件运行截图:

点击测试,会在文档中写入文字和插入图片。

转载于:https://www.cnblogs.com/wangqiang3311/p/7206406.html

c#开发wps插件(3)部署相关推荐

  1. vsto下开发wps插件

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

  2. 创建office vsto外接程序,开发wps插件,配置启动wps进行调试

    我们目前知道创建wps的插件有两种实现方式,第一种是基于类库的方式,参考WPS插件开发流程(1):另一种方式是直接创建office的vsto程序,再手动改写注册表使得wps能够识别和调用.但是就第二种 ...

  3. c#开发wps插件(2)

    上一篇,我们谈了插件开发原理,现在该是应用原理的时候了.工欲善其事必先利其器,首先安装wps 2016专业版,然后再开发. 第一步:打开vs2010,新建一个类库项目,项目结构如下: 说明:其中Res ...

  4. C#开发WPS插件入门

    IDE环境:Microsoft Visual Studio 2010 运行环境:WPS Office 2016 也是刚接触VSTO开发,具体怎么创建工程可以参考博客https://blog.csdn. ...

  5. WPS插件的实现和发布

    WPS插件的实现和发布 1. 关于WPS插件 关于WPS插件基于WPS的二次开发有很多方法,很多用户还习惯用WORD的VBA的方式来开发.方便快捷的VBA开发方式带来便捷的同时也带来了安全隐患.现在的 ...

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

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

  7. Spring Boot:开发常用的热部署方式汇总

    Spring Boot:开发常用的热部署方式汇总 平时开发Sprig Boot的时候,经常改动个小小的地方就要重新启动项目,这无疑是一种很差的体验.在此,博主收集了3种热部署的方案供大家选择. 正文 ...

  8. Spring Boot学习总结(20)——提升开发效率之热部署

    1.模板热部署 在SpringBoot中,模板引擎的页面默认是开启缓存的,如果修改了页面的内容,则刷新页面是得不到修改后的页面的,因此我们可以在application.properties中关闭模版引 ...

  9. linux jenkins 插件,使用Jenkins Dashboard插件可视化部署,

    使用Jenkins Dashboard插件可视化部署, 使用Jenkins可视化部署 插件地址:https://plugins.jenkins.io/deploy-dashboard/ 插件名称:De ...

最新文章

  1. python把坐标写入文本_Python实现将数据写入netCDF4中的方法示例
  2. 分布式系统和集群的区别
  3. Insightface项目爬坑指南+使用本地数据集训练流程(MXNET版)
  4. Centos7安装Python3并更改默认版本为python3(编译安装)
  5. Qt for ios 打开图片和 office文件
  6. 从条纹边框的实现谈盒子模型
  7. html表格中绑定显示xml文档内容的简单实例,JS读取XML文件数据并以table形式显示数据的方法(兼容IE与火狐)...
  8. 怎样用php写入数据库表,PHP如何将数据写入到MYSQL数据库
  9. java与android https,java – Https连接Android
  10. Java 200+ 面试题补充② Netty 模块
  11. Java Servlet的配置文件web.xml配置内容和具体含义
  12. Spring-读取properties文件
  13. 你赞同企业年薪百万的高管对员工说别羡慕赚的多,人家加班和付出的时候你在玩的说法吗?
  14. 拓端tecdat|python3用ARIMA模型进行时间序列预测
  15. 知识图谱——关系抽取
  16. 鼠标中键控制音量大小
  17. 5分钟从零开始搭建一个独立博客网站
  18. foxmail绑定qq邮箱服务器,开通IMAP服务 用Foxmail远程操作QQ邮箱
  19. 精简指令集(RISC)和复杂指令集(CISC)的区别
  20. C语言学习笔记——(三)静态开辟内存和动态开辟内存

热门文章

  1. 在数据库中如何新增一个字段?
  2. RTL8812AU/21AU and RTL8814AU drivers and linux driver
  3. Python 对json文件加密和解密
  4. Linux常用命令:chmod
  5. 如何控制苹果Mac电池健康管理功能?
  6. 如何优雅实现自动化部署
  7. k8s APIServer调用webhook需要域名解析吗?
  8. 推荐5款Windows桌面效率工具
  9. 海康威视网络摄像头购买指南(焦距像素等参数)
  10. scotland yard