上一篇,我们完成了具体的开发工作,但是最终必须得部署到客户机器上。所以,部署方面,我花费了一些时间去研究,现在总结下。上一篇中,我为什么建议开发人员安装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步即可签名:
sn -k wpsAddIn.snk
签了名后,通过下面批处理方式添加到GAC中:
@echo off
echo import reg
@set baseDir="D:myworkWordAddInTest2010WpsWordAddinWpsWordAddininstallin"
regedit /s D:myworkWordAddInTest2010WpsWordAddinWpsWordAddininstallinmyreg.reg
C:WindowsMicrosoft.NETFrameworkv4.0.30319RegAsm %baseDir%DebugWpsWordAddin.dll /tlb:%baseDir%DebugWpsWordAddin.tlb
@SET GACUTIL="%baseDir%NETFX 4.0 Toolsgacutil.exe"
Echo Install the dll into GAC
%GACUTIL% -i %baseDir%DebugWpsWordAddin.dll
%GACUTIL% -i %baseDir%DebugWord.dll
%GACUTIL% -i %baseDir%DebugOffice.dll
pause
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USERSOFTWAREMicrosoftOfficeWordAddinsWpsWordAddin.WPSWord2016]
"FriendlyName"="WpsWordAddin"
"Description"="wps word示例"
"LoadBehavior"=dword:00000003
"CommandLineSafe"=dword:00000001
[HKEY_CURRENT_USERSoftwareKingsoftOfficeWPSAddinsWL]
"WpsWordAddin.WPSWord2016"=""
点击测试,会在文档中写入文字和插入图片。