WPS加载失败原因排查

环境: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中SoftwareClassesWow6432NodeCLSID内容,修改节点,并导入LocalMachine中SoftwareClassesWow6432NodeCLSID

在注册表[HKEY_CURRENT_USERSoftwareClassesWow6432NodeCLSID中,

导出对应错误提示CLSID信息,例如上面提示信息中的:000209FF-0000-4B30-A977-D214852036FE,44720441-94BF-4940-926D-4F38FECF2A47,45540001-5750-5300-4B49-4E47534F4654

导出后,用记事本打开,用批量替换,将“[HKEY_CURRENT_USER”全部替换为“[HKEY_LOCAL_MACHINE”,之后,保存,双击导入注册表,即可完成LocalMachine节点下SoftwareClassesWow6432NodeCLSID的导入。

此时在测试程序,提示会变为:

:无法将类型为“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中SoftwareClassesTypeLib内容,修改节点,并导入LocalMachine中SoftwareClassesTypeLib

在注册表[HKEY_CURRENT_USERSoftwareClassesTypeLib中,

导出对应的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节点下SoftwareClassesTypeLib的导入。

通过上面二步导入,可实现转换PDF正常。

附整理的修改后导入注册表的文件内容(注意WPS安装路径):

[HKEY_LOCAL_MACHINESoftwareClassesWow6432NodeCLSID目录下:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESoftwareClassesWow6432NodeCLSID{000209FF-0000-4b30-A977-D214852036FE}] @="Kingsoft Writer Application Class"

[HKEY_LOCAL_MACHINESoftwareClassesWow6432NodeCLSID{000209FF-0000-4b30-A977-D214852036FE}LocalServer32] @="D:\Program Files (x86)\Kingsoft\WPS Office\9.1.0.4468\office6\wps.exe /Automation"

[HKEY_LOCAL_MACHINESoftwareClassesWow6432NodeCLSID{000209FF-0000-4b30-A977-D214852036FE}ProgID] @="WPS.Application.6"

[HKEY_LOCAL_MACHINESoftwareClassesWow6432NodeCLSID{000209FF-0000-4b30-A977-D214852036FE}Programmable]

[HKEY_LOCAL_MACHINESoftwareClassesWow6432NodeCLSID{000209FF-0000-4b30-A977-D214852036FE}TypeLib] @="{00020905-0000-4b30-A977-D214852036FE}"

[HKEY_LOCAL_MACHINESoftwareClassesWow6432NodeCLSID{000209FF-0000-4b30-A977-D214852036FE}VersionIndependentProgID] @="WPS.Application"

[HKEY_LOCAL_MACHINESoftwareClassesWow6432NodeCLSID{44720441-94BF-4940-926D-4F38FECF2A47}] @="Kingsoft Presentation Application Class"

[HKEY_LOCAL_MACHINESoftwareClassesWow6432NodeCLSID{44720441-94BF-4940-926D-4F38FECF2A47}LocalServer32] @="D:\Program Files (x86)\Kingsoft\WPS Office\9.1.0.4468\office6\wpp.exe /Automation"

[HKEY_LOCAL_MACHINESoftwareClassesWow6432NodeCLSID{44720441-94BF-4940-926D-4F38FECF2A47}ProgID] @="WPP.Application.6"

[HKEY_LOCAL_MACHINESoftwareClassesWow6432NodeCLSID{44720441-94BF-4940-926D-4F38FECF2A47}Programmable]

[HKEY_LOCAL_MACHINESoftwareClassesWow6432NodeCLSID{44720441-94BF-4940-926D-4F38FECF2A47}TypeLib] @="{44720440-94BF-4940-926D-4F38FECF2A47}"

[HKEY_LOCAL_MACHINESoftwareClassesWow6432NodeCLSID{44720441-94BF-4940-926D-4F38FECF2A47}VersionIndependentProgID] @="WPP.Application"

[HKEY_LOCAL_MACHINESoftwareClassesWow6432NodeCLSID{45540001-5750-5300-4B49-4E47534F4654}] @="Kingsoft Spreadsheets Application Class"

[HKEY_LOCAL_MACHINESoftwareClassesWow6432NodeCLSID{45540001-5750-5300-4B49-4E47534F4654}LocalServer32] @="D:\Program Files (x86)\Kingsoft\WPS Office\9.1.0.4468\office6\et.exe /Automation"

[HKEY_LOCAL_MACHINESoftwareClassesWow6432NodeCLSID{45540001-5750-5300-4B49-4E47534F4654}ProgID] @="ET.Application.6"

[HKEY_LOCAL_MACHINESoftwareClassesWow6432NodeCLSID{45540001-5750-5300-4B49-4E47534F4654}Programmable]

[HKEY_LOCAL_MACHINESoftwareClassesWow6432NodeCLSID{45540001-5750-5300-4B49-4E47534F4654}TypeLib] @="{45541000-5750-5300-4B49-4E47534F4654}"

[HKEY_LOCAL_MACHINESoftwareClassesWow6432NodeCLSID{45540001-5750-5300-4B49-4E47534F4654}VersionIndependentProgID] @="ET.Application"

[HKEY_LOCAL_MACHINESoftwareClassesTypeLib目录下:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESoftwareClassesTypeLib{00020905-0000-4B30-A977-D214852036FE}]

[HKEY_LOCAL_MACHINESoftwareClassesTypeLib{00020905-0000-4B30-A977-D214852036FE}2.0] @="Kingsoft WPS 2.0 Object Library"

[HKEY_LOCAL_MACHINESoftwareClassesTypeLib{00020905-0000-4B30-A977-D214852036FE}2.0]

[HKEY_LOCAL_MACHINESoftwareClassesTypeLib{00020905-0000-4B30-A977-D214852036FE}2.0win32] @="D:\Program Files (x86)\Kingsoft\WPS Office\9.1.0.4468\office6\wpsapiv8.dll"

[HKEY_LOCAL_MACHINESoftwareClassesTypeLib{00020905-0000-4B30-A977-D214852036FE}2.0FLAGS] @="0"

[HKEY_LOCAL_MACHINESoftwareClassesTypeLib{00020905-0000-4B30-A977-D214852036FE}2.0HELPDIR] @="D:\Program Files (x86)\Kingsoft\WPS Office\9.1.0.4468\office6\wpsapiv8.dll"

[HKEY_LOCAL_MACHINESoftwareClassesTypeLib{44720440-94BF-4940-926D-4F38FECF2A47}]

[HKEY_LOCAL_MACHINESoftwareClassesTypeLib{44720440-94BF-4940-926D-4F38FECF2A47}1.0] @="Kingsoft WPP 2.0 Object Library"

[HKEY_LOCAL_MACHINESoftwareClassesTypeLib{44720440-94BF-4940-926D-4F38FECF2A47}1.0]

[HKEY_LOCAL_MACHINESoftwareClassesTypeLib{44720440-94BF-4940-926D-4F38FECF2A47}1.0win32] @="D:\Program Files (x86)\Kingsoft\WPS Office\9.1.0.4468\office6\wppapiv8.dll"

[HKEY_LOCAL_MACHINESoftwareClassesTypeLib{44720440-94BF-4940-926D-4F38FECF2A47}1.0FLAGS] @="0"

[HKEY_LOCAL_MACHINESoftwareClassesTypeLib{44720440-94BF-4940-926D-4F38FECF2A47}1.0HELPDIR] @="D:\Program Files (x86)\Kingsoft\WPS Office\9.1.0.4468\office6\wppapiv8.dll"

[HKEY_LOCAL_MACHINESoftwareClassesTypeLib{45541000-5750-5300-4B49-4E47534F4654}]

[HKEY_LOCAL_MACHINESoftwareClassesTypeLib{45541000-5750-5300-4B49-4E47534F4654}2.0] @="Kingsoft ET 2.0 Object Library"

[HKEY_LOCAL_MACHINESoftwareClassesTypeLib{45541000-5750-5300-4B49-4E47534F4654}2.0]

[HKEY_LOCAL_MACHINESoftwareClassesTypeLib{45541000-5750-5300-4B49-4E47534F4654}2.0win32] @="D:\Program Files (x86)\Kingsoft\WPS Office\9.1.0.4468\office6\etapiv8.dll"

[HKEY_LOCAL_MACHINESoftwareClassesTypeLib{45541000-5750-5300-4B49-4E47534F4654}2.0FLAGS] @="0"

[HKEY_LOCAL_MACHINESoftwareClassesTypeLib{45541000-5750-5300-4B49-4E47534F4654}2.0HELPDIR] @="D:\Program Files (x86)\Kingsoft\WPS Office\9.1.0.4468\office6\etapiv8.dll"

[HKEY_LOCAL_MACHINESoftwareClassesTypeLib{4A1D9D13-2EC6-495b-A5B5-848228E0A1CE}]

[HKEY_LOCAL_MACHINESoftwareClassesTypeLib{4A1D9D13-2EC6-495b-A5B5-848228E0A1CE}1.0] @="Kingsoft Office 1.0 Object Library"

[HKEY_LOCAL_MACHINESoftwareClassesTypeLib{4A1D9D13-2EC6-495b-A5B5-848228E0A1CE}1.0]

[HKEY_LOCAL_MACHINESoftwareClassesTypeLib{4A1D9D13-2EC6-495b-A5B5-848228E0A1CE}1.0win32] @="D:\Program Files (x86)\Kingsoft\WPS Office\9.1.0.4468\office6\ksoapiv8.dll"

[HKEY_LOCAL_MACHINESoftwareClassesTypeLib{4A1D9D13-2EC6-495b-A5B5-848228E0A1CE}1.0FLAGS] @="0"

原文地址:https://www.cnblogs.com/liuliu-NoGirl/p/8670806.html