上一篇,我们完成了具体的开发工作,但是最终必须得部署到客户机器上。所以,部署方面,我花费了一些时间去研究,现在总结下。上一篇中,我为什么建议开发人员安装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"=""

插件运行截图:

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

c#开发wps插件(3)部署的更多相关文章

  1. vsto下开发wps插件

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

  2. c#开发wps插件

    wps 2016版比旧版感觉大气多了,加载速度快,操作方便,一直是wps的优点.随着wps的稳定性提高(当然比office还是差了很多),政府等一些部门采用几乎免费的wps来办公.我们公司决定把业务扩 ...

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

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

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

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

  5. spring boot修改代码后无需重启设置,在开发时实现热部署

    Spring Boot在开发时实现热部署(开发时修改文件保存后自动重启应用)(spring-boot-devtools) 热部署是什么 大家都知道在项目开发过程中,常常会改动页面数据或者修改数据结构, ...

  6. SpringBoot开发 - 什么是热部署和热加载?devtool的原理是什么?

    在SpringBoot开发调试中,如果我每行代码的修改都需要重启启动再调试,可能比较费时间:SpringBoot团队针对此问题提供了spring-boot-devtools(简称devtools)插件 ...

  7. Taurus.MVC 微服务框架 入门开发教程:项目部署:7、微服务节点的监控与告警。

    系统目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...

  8. 教你开发jQuery插件(转)

    教你开发jQuery插件(转) 阅读目录 基本方法 支持链式调用 让插件接收参数 面向对象的插件开发 关于命名空间 关于变量定义及命名 压缩的好处 工具 GitHub Service Hook 原文: ...

  9. 使用jenkins 插件自动部署项目至tomcat

    前面使用maven.ant编译项目就不说,只说一下使用jenkins的插件自动部署项目 1.首先jenkins安装插件Deploy to container Plugin ,下载地址为:https:/ ...

随机推荐

  1. Mock摆脱后端拖拉(借鉴官网)(一)

    mock是一个模拟数据生成器,旨在帮助前端独立于后端进行开发,帮助编写单元测试.mock有如下功能 根据数据模板生成模板数据 模拟ajax请求,生成请求数据 基于html模板生成模拟数据 下载安装 n ...

  2. slf4j-logback 日志以json格式导入ELK

    同事整理的,在此分享.logback,log4j2 等slf4j的日志实现都可以以json格式输出日志, 这里采用的是logback.当然也可以以文本行的格式输出,然后在logstash里通过grok ...

  3. CentOS7上安装Nginx、PHP、MySQL

    一.安装准备 首先由于nginx的一些模块依赖一些lib库,所以在安装nginx之前,必须先安装这些lib库,这些依赖库主要有g++.gcc.openssl-devel.pcre-devel和zlib ...

  4. 关于FFMPeg-PHP你必须要知道的

    #PHP FFmpeg [![Build Status](https://secure.travis-ci.org/PHP-FFMpeg/PHP-FFMpeg.png?branch=master)]( ...

  5. Mysql基准测试详细解说(根据慕课网:《打造扛得住Mysql数据库架构》视频课程实时笔录)

    什么是基准测试 基准测试是一种测量和评估软件性能指标的活动用于建立某个时刻的性能基准,以便当系统发生软硬件变化时重新进行基准测试以及评估变化对性能的影响. 我们可以这样认为:基准测试是针对系统设置的一 ...

  6. (MonoGame从入门到放弃-2) 初识MonoGame

    上一节记录了大致的搭建MonoGame的环境,默认大家都是都是使用过Visual Studio的,没使用过的话,可以去https://www.visualstudio.com/下载一个试试,社区版免费 ...

  7. uva11400 动态规划

    没种电压灯泡要么全换,要么不换.状态d(i)表示前i种灯泡的最低价格. 转移方程: dp[i]=min(dp[i],dp[j]+(s[i]-s[j])*d[i].c+d[i].k); AC代码: #i ...

  8. JavaScript的this和作用域

    本文主要讨论一下JS的作用域和this关键字.作用域,就是你的方法或者变量可访问的区域,是他们执行的上下文.如果你见过这样的代码: function someFunc() { var _this = ...

  9. JavaScript设计模式之策略模式

    所谓"条条道路通罗马",在现实中,为达到某种目的往往不是只有一种方法.比如挣钱养家:可以做点小生意,可以打分工,甚至还可以是偷.抢.赌等等各种手段.在程序语言设计中,也会遇到这种类 ...

  10. 设置TCP_USER_TIMEOUT参数来判断tcp连接是否断开

    [TOC] 1. bug描述 前段时间遇到这样的一个问题,openstack一个控制节点宕机后,在宕机后一段时间内创建的虚拟机,一直卡在创建中的状态.有的甚至要等到16分钟之后虚拟机才会切换到下一个状 ...