环境: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″

版权声明:本文为starpnd原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/starpnd/p/3641144.html