環境:win7 64位 WPS Office 個人版 2013
使用WPS的API轉換PDF,在程序中運行正常,但是一旦發布為windows服務,則一直有下面的錯誤提示:
轉換word錯誤:
檢索 COM 類工廠中 CLSID 為 {000209FF-0000-4B30-A977-D214852036FE} 的組件失敗,原因是出現以下錯誤: 80040154 沒有注冊類 (異常來自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))。
===============================================================
轉換PPT錯誤:
:檢索 COM 類工廠中 CLSID 為 {44720441-94BF-4940-926D-4F38FECF2A47} 的組件失敗,原因是出現以下錯誤: 80040154 沒有注冊類 (異常來自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))。
===============================================================
轉換EXCEL錯誤:
:檢索 COM 類工廠中 CLSID 為 {45540001-5750-5300-4B49-4E47534F4654} 的組件失敗,原因是出現以下錯誤: 80040154 沒有注冊類 (異常來自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))。
===============================================================
網上查了很久,綜合方法如下:
1、代碼生成平台改為X86; 測試結果:錯誤依舊,無效
2、更改WPS版本(個人版、商業版); 測試結果:錯誤依舊,無效
3、更改DCOM配置中的權限,登陸用戶; 測試結果:錯誤依舊,無效
4、更改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"