上一篇文章WPS插件开发流程(1)中,我们详细讲了如何在Visual Studio中如何创建插件、在WPS中显示插件的方法 。今天我们完成剩下的部分,讲解如何导出PIA、DLL强签名、打包安装文件夹的方法 。需要注意的是 , 开发WPS插件方法不止一种 , 我分享的开发流程仅供大家参考
(八)生成WPS演示所需的PIA
1. 打开WPS的安装文件夹,找到ksoapi.dll和wppapi.dll,复制到D盘下自己创建的PIA文件夹中 , 方便后续操作提示:若需要生成WPS文字或WPS表格的PIA,对应的DLL分别是wpsapi.dl或etapi.dlll
2. 在开始菜单中,打开”VS 2017的开发人员命令提示符”
3. 输入cd “D:PIA”,进入PIA文件夹中
4. 输入TlbImp ksoapi.dll (注意是tlbimp)后回车,会在PIA文件夹中生成Office.dll 。输入TlbImp wppapi.dll后回车,会在PIA文件夹中生成PowerPoint.dll
5. 这样我们就得到了Office.dll和PowerPoint.dll两个文件
(九)强签名
如果要将这两个Dll添加到GAC,还需要进行强签名(若用户是WPS专业版则不需要,为了兼容性,推荐进行强签名) 。另外 , 如果项目中引用了第三方未签名的dll,则必须进行强签名才能引用1. 输入sn -k test.pfx后回车,生成随机密钥对
提示:此处的test.pfx可以是任意名称,密钥文件扩展名也可以是.snk
2. 输入ildasm Office.dll /out:Office.il后回车 , 采用反汇编工具ildasm生成中间语言 。
3. 输入ilasm /dll /res:Office.res /key:test.pfx Office.il /out:Office.dll后回车 , 采用汇编工具ilasm(注意不要看成ildasm)重新生成dll
4. PowerPoint.dll的强签名操作按照步骤2和3类推,输入以下命令
ildasm PowerPoint.dll /out:PowerPoint.il5. 重新生成dll后提示:Operation completed successfully,说明强签名成功
ilasm /dll /res:PowerPoint.res /key:test.pfx PowerPoint.il /out:PowerPoint.dll
提示:经过强签名后的dll会覆盖原来未签名的dll
6. 强签名后的Office.dll和PowerPoint.dll
(十)部署
1. 将项目调试由Debug改为Release提示:第一次切换Debug为Release,需要在项目属性中重新设置:生成(为COM互操作注册)、调试(启动外部程序)
2. 点启动按钮后关闭WPP,目的是为了让VS生成Release版的项目dll
3. 在项目上右键,点”在文件资源管理器中打开文件夹”
4. 双击打开bin文件夹,双击打开Release文件夹,将之前强签名后的dll复制过来
5. 将上一篇文章中步骤(六)中创建的安装和卸载注册表文件也复制过来
6. 将NETFX 4.0 Tools文件夹复制过来(该文件夹在项目源码中有)
7. 在记事本中输入已下代码,另存为”安装.bat”批处理文件
@echo off8. 在记事本中输入以下代码,另存为”卸载.bat”批处理文件
@set baseDir="%?
Echo.
Echo 【1】导入注册表
regedit /s 簊eDir%install.reg
Echo.
Echo 【2】注册类型
C:WindowsMicrosoft.NETFrameworkv4.0.30319RegAsm 簊eDir%WPP_test.dll /tlb:簊eDir%WPP_test.tlb
Echo.
Echo 【3】添加程序集到GAC
@SET GACUTIL="簊eDir%NETFX 4.0 Toolsgacutil.exe"
%GACUTIL% -i 簊eDir%WPP_test.dll
%GACUTIL% -i 簊eDir%PowerPoint.dll
%GACUTIL% -i 簊eDir%Office.dll
Echo.
pause
@echo off
@set baseDir="%?
Echo.
Echo 【1】从缓存中移除程序集
@SET GACUTIL="簊eDir%NETFX 4.0 Toolsgacutil.exe"
rd /s /Q C:WindowsMicrosoft.NETassemblyGAC_MSILWPP_test
rd /s /Q C:WindowsMicrosoft.NETassemblyGAC_MSILPowerPoint
rd /s /Q C:WindowsMicrosoft.NETassemblyGAC_MSILOffice
Echo.
Echo 【2】注销类型
C:WindowsMicrosoft.NETFrameworkv4.0.30319RegAsm /u 簊eDir%WPP_test.dll /tlb:簊eDir%WPP_test.tlb
Echo.
Echo 【3】清除注册表
regedit /s 簊eDir\uninstall.reg
Echo.
pause
说明:9. 将Release文件夹整体拷贝出来,打包发给用户 。用户安装时,以管理员身份运行”安装.bat”即可安装插件
(1)%褪莃at文件当前文件夹路径;RegAsm是程序集注册工具 , 需要用户先安装Microsoft .Net Framework 4.0;gacutil.exe是全局程序集缓存工具,用户电脑一般没有,所以需要我们将NETFX 4.0 Tools文件夹附带在安装包里
(2)上面的”安装.bat”和”卸载.bat”中均默认注册或移出PowerPoint.dll和Office.dll , 如果用户安装了同样也是本文章方法创建的插件,可能会影响其他插件使用 。为保险起见,我们可以在”卸载.bat”文件中不要移除C:WindowsMicrosoft.NETassemblyGAC_MSIL文件夹下的PowerPoint和Office文件夹 。即在上方”卸载.bat”代码中去掉下面两句:
rd /s /Q C:WindowsMicrosoft.NETassemblyGAC_MSILPowerPoint
rd /s /Q C:WindowsMicrosoft.NETassemblyGAC_MSILOffice
10. 用户安装失败常见原因
(1)用户未安装Microsoft .Net Framework 4.0
(2)Win7以上系统,用户未以管理员身份运行安装.bat
(3)安装文件夹所在路径中有空格 , 需去掉文件夹路径中的空格
(4)注册表未成功添加插件信息,需要用户手动双击”install.reg”添加插件信息到注册表