生成Word文档时出现检索组件的COM类工厂错误

9
我正在尝试使用以下大部分代码从VB.NET编辑Word文档: 如何使用Visual Basic .NET自动化Word创建新文档 http://support.microsoft.com/kb/316383 它在我的机器上运行良好,但当我发布到服务器时,出现以下错误。
检索具有CLSID {000209FF-0000-0000-C000-000000000046}的组件的COM类工厂失败,原因是发生以下错误:80070005。 描述:当前Web请求的执行过程中发生未处理的异常。请查看堆栈跟踪以了解更多关于该错误及其源代码的信息。 异常详细信息:System.UnauthorizedAccessException:检索具有CLSID {000209FF-0000-0000-C000-000000000046}的组件的COM类工厂失败,原因是发生以下错误:80070005。
实际错误发生在我尝试创建Word应用程序对象时。
 Dim oWord As New Word.Application

使用Visual Studio 2008和VB.NET 3.5。我引用了“Microsoft Word 10.0 Object Library”,并在bin目录中看到Interop.Word.dll文件。
在开发机上使用MS Office 2003和Windows Server 2003。
对于.NET还比较新,对于窗口服务器也没有太多的了解,但是“UnauthorizedAccessException”听起来像是权限问题。我想知道是否有人能指导我应该如何为我的小应用程序提供使用Word的访问权限。
8个回答

8

这听起来肯定是一个权限问题。您的代码在Windows服务中运行吗?该服务通常以Local System身份运行,可能没有权限访问Word对象模型。此外,如果Word已经使用其他用户的凭据运行,则您的程序可能无法使用不同的凭据通过COM访问它。Office应用程序倾向于是单实例,这似乎加剧了这个问题。


有趣的是当我登录系统并运行Word时,它运行了安装程序。我猜在此用户上之前没有人运行过Word。这没有解决我的问题,但即使没有权限问题,我想知道是否会阻止它工作。不,我的代码是一个Web应用程序。虽然这是一个很少使用的小应用程序,但我从未考虑过如果两个人同时运行它会发生什么。感谢您的建议。有办法查看是否有其他人正在访问COM对象吗?我非常确定没有其他东西,但我甚至不知道要在哪里检查。 - TheDPQ
Web应用程序正在以哪个用户身份运行?例如,在IIS 7中,应用程序池将作为本地系统运行,这可能会遇到相同的问题。 - 1800 INFORMATION
请再次原谅我的无知,"Network Service" 是你所说的吗?这是应用程序池设置要使用的身份。 - TheDPQ
我将<identity impersonate="true"/>添加到webconfig中,并将自己添加到MS Word文档DCOM中,但仍然遇到了我之前提到的80080005错误。我在DCOM中找到了Word应用程序ID的'应用程序ID'为{00020906-00000-0000-C000-000000000046},但是我得到的错误说CLSID 000209FF-0000-0000-C000-000000000046,我想知道这是否相关。再次感谢您的帮助,即使我的问题仍然存在,我已经学到了很多。:D - TheDPQ
1
我以我的身份登录服务器,运行了Web应用程序,它弹出了一些奇怪的Windows Live东西,当我点击“继续”时,它实际上启动了Word,但给了我ASP.NET错误“Add方法或属性不可用,因为使用此应用程序的许可已过期”。哈哈,服务器上的Office从未被激活...我刚意识到我有Word 2002(MS 10),而服务器有2003(MS 11)...我会研究这两个问题。 - TheDPQ
显示剩余2条评论

1
在我的情况下,Word是在服务帐户下通过Windows服务运行的。
问题是桌面文件夹不存在于C:\Windows\System32\config\systemprofile(或C:\Windows\SysWOW64\config\systemprofile)中。
添加它解决了我的问题。

0

0

0

我在生成Word文档时遇到了同样的问题。通过检查任务管理器,结束当前正在运行的WINWORD.EXE进程,然后再次执行我的代码,问题得以解决。


0

听起来你可能在 DCOM 中有权限问题。尝试编辑 DCOM 配置中的 Word 权限。


发现有一些人引用了http://blog.crowe.co.nz/archive/2006/03/02/589.aspx,但那是针对Excel的。没有帮助,错误仍然相同,但错误号码已更改为:80080005。出现System.Runtime.InteropServices.COMException而不是System.UnauthorizedAccessException。 - TheDPQ


0

前往 开始 -> 运行
输入 regedit -32 并按回车键。
-- 注册表编辑器 将会打开。
前往注册表 HKEY_CLASSES_ROOT\Word.Application
选择 Word.Application 并为以下用户设置完全权限:-
管理员、Administrators、本地服务、系统、服务、交互和用户。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接