環境:win7 64位 WPS Office 我的版 2013windows
使用WPS的API轉換PDF,在程序中運行正常,可是一旦發佈爲windows服務,則一直有下面的錯誤提示:api
轉換word錯誤:測試
檢索 COM 類工廠中 CLSID 爲 {000209FF-0000-4B30-A977-D214852036FE} 的組件失敗,緣由是出現如下錯誤: 80040154 沒有註冊類 (異常來自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))。對象
===============================================================接口
轉換PPT錯誤:v8
:檢索 COM 類工廠中 CLSID 爲 {44720441-94BF-4940-926D-4F38FECF2A47} 的組件失敗,緣由是出現如下錯誤: 80040154 沒有註冊類 (異常來自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))。it
===============================================================io
轉換EXCEL錯誤:軟件
:檢索 COM 類工廠中 CLSID 爲 {45540001-5750-5300-4B49-4E47534F4654} 的組件失敗,緣由是出現如下錯誤: 80040154 沒有註冊類 (異常來自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))。配置
===============================================================
網上查了好久,綜合方法以下:
一、代碼生成平臺改成X86; 測試結果:錯誤依舊,無效
二、更改WPS版本(我的版、商業版); 測試結果:錯誤依舊,無效
三、更改DCOM配置中的權限,登錄用戶; 測試結果:錯誤依舊,無效
四、更改WPS版本爲WPS2010; 測試結果:轉換正常,成功
緣由:通常軟件安裝時,會提示選擇使用用戶:當前登錄用戶或者全部用戶,若是選擇當前登錄用戶,會將信息寫入註冊表CurrentUser下;若是選擇全部用戶,會將信息寫入註冊表LocalMachine中。
WPS2013不容許選擇使用用戶,默認將註冊表信息保存在CurrentUser下,而WPS2010默認是選擇全部人的,寫到LocalMachine節點下
沒法理解的是:我是用administrator用戶登錄win7,按理就算當前用戶,而windows服務登錄用戶也是系統用戶,不該該出現這種錯誤,但實際上還有這種錯誤……
研究了3天,各類能嘗試的方法都嘗試過,最終想到的解決辦法以下:
將註冊表中WPS2013保存在CurrentUser節點下的部份內容導出,並導入LocalMachine節點下,可實現正常轉換。
第一步:導出註冊表CurrentUse中Software\Classes\Wow6432Node\CLSID內容,修改節點,並導入LocalMachine中Software\Classes\Wow6432Node\CLSID
在註冊表[HKEY_CURRENT_USER\Software\Classes\Wow6432Node\CLSID\中,
導出對應錯誤提示CLSID信息,例如上面提示信息中的:000209FF-0000-4B30-A977-D214852036FE,44720441-94BF-4940-926D-4F38FECF2A47,45540001-5750-5300-4B49-4E47534F4654
導出後,用記事本打開,用批量替換,將「[HKEY_CURRENT_USER\」所有替換爲「[HKEY_LOCAL_MACHINE\」,以後,保存,雙擊導入註冊表,便可完成LocalMachine節點下Software\Classes\Wow6432Node\CLSID\的導入。
此時在測試程序,提示會變爲:
:沒法將類型爲「System.__ComObject」的 COM 對象強制轉換爲接口類型「ET.Application」。此操做失敗的緣由是對 IID 爲「{45541001-5750-5300-4B49-4E47534F4654}」的接口的 COM 組件調用 QueryInterface 因如下錯誤而失敗: 庫沒有註冊。 (異常來自 HRESULT:0x8002801D (TYPE_E_LIBNOTREGISTERED))。
===============================================================
:沒法將類型爲「System.__ComObject」的 COM 對象強制轉換爲接口類型「WPP.Application」。此操做失敗的緣由是對 IID 爲「{44720442-94BF-4940-926D-4F38FECF2A47}」的接口的 COM 組件調用 QueryInterface 因如下錯誤而失敗: 庫沒有註冊。 (異常來自 HRESULT:0x8002801D (TYPE_E_LIBNOTREGISTERED))。
===============================================================
:沒法將類型爲「System.__ComObject」的 COM 對象強制轉換爲接口類型「WPS.Application」。此操做失敗的緣由是對 IID 爲「{00020970-0000-4B30-A977-D214852036FE}」的接口的 COM 組件調用 QueryInterface 因如下錯誤而失敗: 庫沒有註冊。 (異常來自 HRESULT:0x8002801D (TYPE_E_LIBNOTREGISTERED))。
===============================================================
第二步:導出註冊表CurrentUse中Software\Classes\TypeLib內容,修改節點,並導入LocalMachine中Software\Classes\TypeLib
在註冊表[HKEY_CURRENT_USER\Software\Classes\TypeLib\中,
導出對應的ID信息,ID來源,分別爲代碼中添加引用的組件標識:
Interop.WPS標識ID:00020905-0000-4b30-A977-D214852036FE
Interop.WPP標識ID:44720440-94BF-4940-926D-4F38FECF2A47
Interop.ET標識ID:45541000-5750-5300-4B49-4E47534F4654
Interop.KSO標識ID:4A1D9D13-2EC6-495B-A5B5-848228E0A1CE
導出後,用記事本打開,用批量替換,將「[HKEY_CURRENT_USER\」所有替換爲「[HKEY_LOCAL_MACHINE\」,以後,保存,雙擊導入註冊表,便可完成LocalMachine節點下Software\Classes\TypeLib\的導入。
經過上面二步導入,可實現轉換PDF正常。
附整理的修改後導入註冊表的文件內容(注意WPS安裝路徑):
[HKEY_LOCAL_MACHINE\Software\Classes\Wow6432Node\CLSID目錄下:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\Software\Classes\Wow6432Node\CLSID\{000209FF-0000-4b30-A977-D214852036FE}] @="Kingsoft Writer Application Class"
[HKEY_LOCAL_MACHINE\Software\Classes\Wow6432Node\CLSID\{000209FF-0000-4b30-A977-D214852036FE}\LocalServer32] @="D:\\Program Files (x86)\\Kingsoft\\WPS Office\\9.1.0.4468\\office6\\wps.exe /Automation"
[HKEY_LOCAL_MACHINE\Software\Classes\Wow6432Node\CLSID\{000209FF-0000-4b30-A977-D214852036FE}\ProgID] @="WPS.Application.6"
[HKEY_LOCAL_MACHINE\Software\Classes\Wow6432Node\CLSID\{000209FF-0000-4b30-A977-D214852036FE}\Programmable]
[HKEY_LOCAL_MACHINE\Software\Classes\Wow6432Node\CLSID\{000209FF-0000-4b30-A977-D214852036FE}\TypeLib] @="{00020905-0000-4b30-A977-D214852036FE}"
[HKEY_LOCAL_MACHINE\Software\Classes\Wow6432Node\CLSID\{000209FF-0000-4b30-A977-D214852036FE}\VersionIndependentProgID] @="WPS.Application"
[HKEY_LOCAL_MACHINE\Software\Classes\Wow6432Node\CLSID\{44720441-94BF-4940-926D-4F38FECF2A47}] @="Kingsoft Presentation Application Class"
[HKEY_LOCAL_MACHINE\Software\Classes\Wow6432Node\CLSID\{44720441-94BF-4940-926D-4F38FECF2A47}\LocalServer32] @="D:\\Program Files (x86)\\Kingsoft\\WPS Office\\9.1.0.4468\\office6\\wpp.exe /Automation"
[HKEY_LOCAL_MACHINE\Software\Classes\Wow6432Node\CLSID\{44720441-94BF-4940-926D-4F38FECF2A47}\ProgID] @="WPP.Application.6"
[HKEY_LOCAL_MACHINE\Software\Classes\Wow6432Node\CLSID\{44720441-94BF-4940-926D-4F38FECF2A47}\Programmable]
[HKEY_LOCAL_MACHINE\Software\Classes\Wow6432Node\CLSID\{44720441-94BF-4940-926D-4F38FECF2A47}\TypeLib] @="{44720440-94BF-4940-926D-4F38FECF2A47}"
[HKEY_LOCAL_MACHINE\Software\Classes\Wow6432Node\CLSID\{44720441-94BF-4940-926D-4F38FECF2A47}\VersionIndependentProgID] @="WPP.Application"
[HKEY_LOCAL_MACHINE\Software\Classes\Wow6432Node\CLSID\{45540001-5750-5300-4B49-4E47534F4654}] @="Kingsoft Spreadsheets Application Class"
[HKEY_LOCAL_MACHINE\Software\Classes\Wow6432Node\CLSID\{45540001-5750-5300-4B49-4E47534F4654}\LocalServer32] @="D:\\Program Files (x86)\\Kingsoft\\WPS Office\\9.1.0.4468\\office6\\et.exe /Automation"
[HKEY_LOCAL_MACHINE\Software\Classes\Wow6432Node\CLSID\{45540001-5750-5300-4B49-4E47534F4654}\ProgID] @="ET.Application.6"
[HKEY_LOCAL_MACHINE\Software\Classes\Wow6432Node\CLSID\{45540001-5750-5300-4B49-4E47534F4654}\Programmable]
[HKEY_LOCAL_MACHINE\Software\Classes\Wow6432Node\CLSID\{45540001-5750-5300-4B49-4E47534F4654}\TypeLib] @="{45541000-5750-5300-4B49-4E47534F4654}"
[HKEY_LOCAL_MACHINE\Software\Classes\Wow6432Node\CLSID\{45540001-5750-5300-4B49-4E47534F4654}\VersionIndependentProgID] @="ET.Application"
[HKEY_LOCAL_MACHINE\Software\Classes\TypeLib目錄下:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\Software\Classes\TypeLib\{00020905-0000-4B30-A977-D214852036FE}]
[HKEY_LOCAL_MACHINE\Software\Classes\TypeLib\{00020905-0000-4B30-A977-D214852036FE}\2.0] @="Kingsoft WPS 2.0 Object Library"
[HKEY_LOCAL_MACHINE\Software\Classes\TypeLib\{00020905-0000-4B30-A977-D214852036FE}\2.0\0]
[HKEY_LOCAL_MACHINE\Software\Classes\TypeLib\{00020905-0000-4B30-A977-D214852036FE}\2.0\0\win32] @="D:\\Program Files (x86)\\Kingsoft\\WPS Office\\9.1.0.4468\\office6\\wpsapiv8.dll"
[HKEY_LOCAL_MACHINE\Software\Classes\TypeLib\{00020905-0000-4B30-A977-D214852036FE}\2.0\FLAGS] @="0"
[HKEY_LOCAL_MACHINE\Software\Classes\TypeLib\{00020905-0000-4B30-A977-D214852036FE}\2.0\HELPDIR] @="D:\\Program Files (x86)\\Kingsoft\\WPS Office\\9.1.0.4468\\office6\\wpsapiv8.dll"
[HKEY_LOCAL_MACHINE\Software\Classes\TypeLib\{44720440-94BF-4940-926D-4F38FECF2A47}]
[HKEY_LOCAL_MACHINE\Software\Classes\TypeLib\{44720440-94BF-4940-926D-4F38FECF2A47}\1.0] @="Kingsoft WPP 2.0 Object Library"
[HKEY_LOCAL_MACHINE\Software\Classes\TypeLib\{44720440-94BF-4940-926D-4F38FECF2A47}\1.0\0]
[HKEY_LOCAL_MACHINE\Software\Classes\TypeLib\{44720440-94BF-4940-926D-4F38FECF2A47}\1.0\0\win32] @="D:\\Program Files (x86)\\Kingsoft\\WPS Office\\9.1.0.4468\\office6\\wppapiv8.dll"
[HKEY_LOCAL_MACHINE\Software\Classes\TypeLib\{44720440-94BF-4940-926D-4F38FECF2A47}\1.0\FLAGS] @="0"
[HKEY_LOCAL_MACHINE\Software\Classes\TypeLib\{44720440-94BF-4940-926D-4F38FECF2A47}\1.0\HELPDIR] @="D:\\Program Files (x86)\\Kingsoft\\WPS Office\\9.1.0.4468\\office6\\wppapiv8.dll"
[HKEY_LOCAL_MACHINE\Software\Classes\TypeLib\{45541000-5750-5300-4B49-4E47534F4654}]
[HKEY_LOCAL_MACHINE\Software\Classes\TypeLib\{45541000-5750-5300-4B49-4E47534F4654}\2.0] @="Kingsoft ET 2.0 Object Library"
[HKEY_LOCAL_MACHINE\Software\Classes\TypeLib\{45541000-5750-5300-4B49-4E47534F4654}\2.0\0]
[HKEY_LOCAL_MACHINE\Software\Classes\TypeLib\{45541000-5750-5300-4B49-4E47534F4654}\2.0\0\win32] @="D:\\Program Files (x86)\\Kingsoft\\WPS Office\\9.1.0.4468\\office6\\etapiv8.dll"
[HKEY_LOCAL_MACHINE\Software\Classes\TypeLib\{45541000-5750-5300-4B49-4E47534F4654}\2.0\FLAGS] @="0"
[HKEY_LOCAL_MACHINE\Software\Classes\TypeLib\{45541000-5750-5300-4B49-4E47534F4654}\2.0\HELPDIR] @="D:\\Program Files (x86)\\Kingsoft\\WPS Office\\9.1.0.4468\\office6\\etapiv8.dll"
[HKEY_LOCAL_MACHINE\Software\Classes\TypeLib\{4A1D9D13-2EC6-495b-A5B5-848228E0A1CE}]
[HKEY_LOCAL_MACHINE\Software\Classes\TypeLib\{4A1D9D13-2EC6-495b-A5B5-848228E0A1CE}\1.0] @="Kingsoft Office 1.0 Object Library"
[HKEY_LOCAL_MACHINE\Software\Classes\TypeLib\{4A1D9D13-2EC6-495b-A5B5-848228E0A1CE}\1.0\0]
[HKEY_LOCAL_MACHINE\Software\Classes\TypeLib\{4A1D9D13-2EC6-495b-A5B5-848228E0A1CE}\1.0\0\win32] @="D:\\Program Files (x86)\\Kingsoft\\WPS Office\\9.1.0.4468\\office6\\ksoapiv8.dll"
[HKEY_LOCAL_MACHINE\Software\Classes\TypeLib\{4A1D9D13-2EC6-495b-A5B5-848228E0A1CE}\1.0\FLAGS] @="0"