上一篇文章WPS插件開(kāi)發(fā)流程(1)中,我們詳細講了如何在Visual Studio中如何創(chuàng )建插件、在WPS中顯示插件的方法。今天我們完成剩下的部分,講解如何導出PIA、DLL強簽名、打包安裝文件夾的方法。需要注意的是,開(kāi)發(fā)WPS插件方法不止一種,我分享的開(kāi)發(fā)流程僅供大家參考
(八)生成WPS演示所需的PIA
我參考的原文章:http://www.cnblogs.com/wangqiang3311/p/7206406.html
1. 打開(kāi)WPS的安裝文件夾,找到ksoapi.dll和wppapi.dll,復制到D盤(pán)下自己創(chuàng )建的PIA文件夾中,方便后續操作
提示:若需要生成WPS文字或WPS表格的PIA,對應的DLL分別是wpsapi.dl或etapi.dlll
2. 在開(kāi)始菜單中,打開(kāi)”VS 2017的開(kāi)發(fā)人員命令提示符”
3. 輸入cd “D:\PIA”,進(jìn)入PIA文件夾中
4. 輸入TlbImp ksoapi.dll (注意是tlbimp)后回車(chē),會(huì )在PIA文件夾中生成Office.dll。輸入TlbImp wppapi.dll 后回車(chē),會(huì )在PIA文件夾中生成PowerPoint.dll
5. 這樣我們就得到了Office.dll和PowerPoint.dll兩個(gè)文件
(九)強簽名
如果要將這兩個(gè)Dll添加到GAC,還需要進(jìn)行強簽名(若用戶(hù)是WPS專(zhuān)業(yè)版則不需要,為了兼容性,推薦進(jìn)行強簽名)。另外,如果項目中引用了第三方未簽名的dll,則必須進(jìn)行強簽名才能引用
1. 輸入sn -k test.pfx后回車(chē),生成隨機密鑰對
提示:此處的test.pfx可以是任意名稱(chēng),密鑰文件擴展名也可以是.snk
2. 輸入ildasm Office.dll /out:Office.il后回車(chē),采用反匯編工具ildasm生成中間語(yǔ)言。
3. 輸入ilasm /dll /res:Office.res /key:test.pfx Office.il /out:Office.dll后回車(chē),采用匯編工具ilasm(注意不要看成ildasm)重新生成dll
4. PowerPoint.dll的強簽名操作按照步驟2和3類(lèi)推,輸入以下命令
ildasm PowerPoint.dll /out:PowerPoint.il
ilasm /dll /res:PowerPoint.res /key:test.pfx PowerPoint.il/out:PowerPoint.dll
5. 重新生成dll后提示:Operation completed successfully,說(shuō)明強簽名成功
提示:經(jīng)過(guò)強簽名后的dll會(huì )覆蓋原來(lái)未簽名的dll
6. 強簽名后的Office.dll和PowerPoint.dll
(十)部署
1. 將項目調試由Debug改為Release
提示:第一次切換Debug為Release,需要在項目屬性中重新設置:生成(為COM互操作注冊)、調試(啟動(dòng)外部程序)
2. 點(diǎn)啟動(dòng)按鈕后關(guān)閉WPP,目的是為了讓VS生成Release版的項目dll
3. 在項目上右鍵,點(diǎn)”在文件資源管理器中打開(kāi)文件夾”
4. 雙擊bin文件夾,雙擊打開(kāi)Release文件夾,將之前強簽名后的dll復制過(guò)來(lái)
5. 將步驟(六)中創(chuàng )建的安裝和卸載注冊表文件也復制過(guò)來(lái)
6. 將NETFX 4.0 Tools文件夾復制過(guò)來(lái)(該文件夾在項目源碼的Release文件夾中有)
7. 在記事本中輸入已下代碼,另存為”安裝.bat”批處理文件
@echo off
@setbaseDir="%cd%"
Echo.
Echo 【1】導入注冊表
regedit/s %baseDir%\install.reg
Echo.
Echo 【2】注冊類(lèi)型
C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm%baseDir%\WPP_test.dll /tlb:%baseDir%\WPP_test.tlb
Echo.
Echo 【3】添加程序集到GAC
@SETGACUTIL="%baseDir%\NETFX 4.0 Tools\gacutil.exe"
%GACUTIL%-i %baseDir%\WPP_test.dll
%GACUTIL%-i %baseDir%\PowerPoint.dll
%GACUTIL%-i %baseDir%\Office.dll
pause
8. 在記事本中輸入以下代碼,另存為”卸載.bat”批處理文件
@echo off
@setbaseDir="%cd%"
Echo.
Echo 【1】從緩存中移除程序集
@SETGACUTIL="%baseDir%\NETFX 4.0 Tools\gacutil.exe"
rd /s /QC:\Windows\Microsoft.NET\assembly\GAC_MSIL\WPP_test
rd /s /QC:\Windows\Microsoft.NET\assembly\GAC_MSIL\PowerPoint
rd /s /QC:\Windows\Microsoft.NET\assembly\GAC_MSIL\Office
Echo.
Echo 【2】注銷(xiāo)類(lèi)型
C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm/u %baseDir%\WPP_test.dll /tlb:%baseDir%\WPP_test.tlb
Echo.
Echo 【3】清除注冊表
regedit/s %baseDir%\uninstall.reg
pause
說(shuō)明:
(1)%cd%是bat文件當前文件夾路徑;RegAsm是程序集注冊工具,需要用戶(hù)先安裝Microsoft .Net Framework 4.0;gacutil.exe是全局程序集緩存工具,用戶(hù)電腦一般沒(méi)有,所以需要我們將NETFX 4.0 Tools文件夾附帶在安裝包里
(2)上面的”安裝.bat”和”卸載.bat”中均默認注冊或移出PowerPoint.dll和Office.dll,如果用戶(hù)安裝了同樣也是本文章方法創(chuàng )建的插件,可能會(huì )影響其他插件使用。為保險起見(jiàn),我們可以在”卸載.bat”文件中不要移除C:\Windows\Microsoft.NET\assembly\GAC_MSIL文件夾下的PowerPoint和Office文件夾。即在上方”卸載.bat”代碼中去掉下面兩句:
rd /s /QC:\Windows\Microsoft.NET\assembly\GAC_MSIL\PowerPoint
rd /s /QC:\Windows\Microsoft.NET\assembly\GAC_MSIL\Office
9. 將Release文件夾整體拷貝出來(lái),打包發(fā)給用戶(hù)。用戶(hù)安裝時(shí),以管理員身份運行”安裝.bat”即可
10. 用戶(hù)安裝失敗常見(jiàn)原因
(1) 用戶(hù)未安裝Microsoft .Net Framework 4.0
(2) Win7以上系統,用戶(hù)未以管理員身份運行安裝.bat
(3) 安裝文件夾所在路徑中有空格,需去掉文件夾路徑中的空格
注冊表未成功添加插件信息,需要用戶(hù)手動(dòng)雙擊”install.reg”添加插件信息到注冊表