需要對wps寫一個小的插件,也就是幾行代碼的事情,但卻碰到了一個坑
wps中的com組件的調用和MSoffice非常的相似,幾乎只需要把包的頭修改一下就可以用了。
比如開發wps文檔的插件,需要引用
- Kingsoft Add-In Designer
- Kingsoft Wps 2.0 Object Library
- kingsoft Office 2.0(1.0) Object Library (選2.0的的時候會勾選1.0)
然后繼承一個IDTExtensibility2
接口並設置一個[ComVisible(true)]
就可以開始開發了,但是在接下來的事情里面就是一個坑了。
在OnConnection事件里面添加一條彈出一個框
MessageBox.Show("aaa");
設置啟動類庫設置-》生成中設置com互操作組成,然后編譯.
編譯的時候由於設置為Com互操作需要使用管理員權限,如果不使用管理員權限會提示
錯誤 7 無法注冊程序集“E:\test\WordItemDev\WpsItemInsert\bin\Debug\WpsItemInsert.dll”- 拒絕訪問。請確保您正在以管理員身份運行應用程序。對注冊表項“HKEY_CLASSES_ROOT\WpsItemInsert.Init”的訪問被拒絕。 WpsItemInsert
於是使用管理員啟動visual Studio,但是編譯的時候卻找不到wps上面的三個組件。
未能添加對"kingsoft WPS 2.0 Object Library"的引用
大概就是管理員下com組件沒有注冊,所以手工來給幾個lib注冊
C:\WINDOWS\system32>regsvr32 D:\Program Files\WPS Office\9.1.0.4468\office6\ksaddndr.dll
注冊下面dll
C:\WINDOWS\system32>regsvr32 D:\wps\9.1.0.4468\office6\ksoapiv8.dll
提示模塊xxx已經加載,但找不到入口點DllRegisterServerXXXXXXX
也就是說我在普通模式下編譯無法注冊com組件,而在管理員模式無法調用wps的com組件。
在wps論壇上問了這個問題,給的回答是
使用管理員權限運行vs,但是引wps的com組件出現了問題,在普通運行的時候是沒有問題的”這個貌似有點吻合。樓主用登錄管理員安裝WPS2013試試?
ps:一般的軟件在安裝的時候都會提示該軟件是僅適用我,還是所有人。如果是僅適用於我的話,就會將注冊表信息保存在CurrentUser下,這樣只有該用戶登錄才能看到該軟件;如果是選擇所有人的話,就會寫到LocalMachine節點下
確實是wps默認只給當前用戶注冊了com組件,所以在管理員權限下面會找不到wps的com組件
解決方法
是去administrator用戶下重新安裝一下wps就好了。在具有管理員權限的其他用戶下使用管理員權限也不行,一定要到adminsitartor用戶下才行。
如果不能進管理員權限,在當前用戶下使用管理員權限運行cmd執行
net user administrator /active:yes
注銷后就能夠看到adminsitrator用戶了。