System.UnauthorizedAccessException:检索 Word 互操作的 COM 类工厂失败并出现错误 80070005
Posted
技术标签:
【中文标题】System.UnauthorizedAccessException:检索 Word 互操作的 COM 类工厂失败并出现错误 80070005【英文标题】:System.UnauthorizedAccessException: Retrieving the COM class factory for Word Interop fails with error 80070005 【发布时间】:2010-12-02 05:52:15 【问题描述】:我在 Visual Studio 2008 中遇到了一个 C# ASP .NET 项目的问题 当我用 Windows 7 Ultimate (x64) 重新安装我的电脑时,这个问题就开始了。为此,我也在使用 Office 2007。
我得到的错误信息是:
System.UnauthorizedAccessException:检索具有 CLSID 000209FF-0000-0000-C000-000000000046 的组件的 COM 类工厂失败,原因是以下错误:80070005。 在 xxx.Utility.WordDocument..ctor(字符串文件路径,HttpServerUtility util) 在 c:\xxx\Website\customer\communication.aspx.cs:line 127 中的 customer_communication.BuCreate_click(Object sender, EventArgs e) 处
【问题讨论】:
也许您应该向我们展示 'c:\xxx\Website\customer\communication.aspx.cs' 文件的内容,以便我们知道您要做什么。跨度> COM Guid 将 Google 上对 Microsoft Office 的大量引用,特别是 2003 版。我认为这是未安装 2003 互操作组件的直接结果? 史诗级标题!我喜欢它:D blog.crowe.co.nz/archive/2006/03/02/589.aspx 【参考方案1】:这是我解决此问题的方法:
我使用的是 Win 7 64 位和 Office 2007
运行程序“dcomcnfg -32”。 (64位下找不到word和excel组件)
转到“控制台根目录/组件服务/计算机/我的电脑/DCOM 配置/” 查找 Microsoft Word 和 Excel 并选择属性。
转到安全并选择“配置权限”下的“自定义”。(如果需要,您可能还想更改其他权限,但我不需要) 添加“IIS_IUSRS”并赋予它“完全控制”。
现在转到“身份”并选择“交互式用户”。
完成后不要忘记按“确定”。 :D
我希望这可以帮助您解决您的问题,以及其他到这里阅读本文的人。
【讨论】:
感谢您的帖子,它帮助我解决了我的问题。您必须对“Microsoft Excel 预览器”对象执行相同的步骤。 正确写法是dcomcnfg /32
更多信息见this answer
我正在使用 Win7 64 位和 Office 2010(32 位),在“组件服务”中我没有看到任何有关 MS Word 的信息。我能做什么?
“入门”版本不能很好地配合办公自动化。所以这可能是它们未列出的原因之一。
当我将控制台应用程序注册为任务计划程序中的任务时,这对我有用,但是在第二天上午 12:00 再次出现此错误。你知道为什么吗?【参考方案2】:
您应该授予对 ASP.NET 进程标识的 Word COM 组件的访问权限(IIS 5 上的 MACHINE\ASPNET 或 IIS 6 上的网络服务):
“控制面板 - 管理工具 - 组件服务 - 计算机 - 我的电脑 - DCOM 配置”
找出“Microsoft Word 文档”,右键单击 - 设置 - 安全选项卡,授予 ASP.NET 进程标识的访问权限(本地和远程)(IIS 5 的“ASPNET”,“网络服务” " 用于 IIS 6)。
如果您收到“System.Runtime.InteropServices.COMException (0x800A13E9):内存不足。立即保存文档。”打开/添加文档时出现异常(我自己的经验),只需从 %Temp% 和 \Content.Word 文件夹中删除临时文件即可。
【讨论】:
我遇到了同样的问题,但在 DCOM 配置中找不到“Microsoft Word 文档”。 “Microsoft Word 文档”已使用您的 MS Office 语言进行本地化。例如,在俄语中,它被命名为“Документ Microsoft Word”。您也可以尝试通过右栏中的 CLSID 000209FF-0000-0000-C000-000000000046 找到它(使用表格视图)。 “本地和远程”选项位于“安全”选项卡的“启动和激活权限”组中。 我无法在 DCOM 配置中找到 CLSID 或 Microsoft Word 文档 如果您安装了 MS Word,则应显示 CLSID。请记住,Microsoft Word Document
将使用您的系统语言进行本地化。不幸的是,DCOM Config 不允许按 CLSID 排序,所以按 CLSID 值查找是一件很烦人的事情。【参考方案3】:
启动 dcomcnfg -32
或 dcomcnfg /32
都未能在列表中显示目标应用程序 (Microsoft Excel)。
但我遵循@How to make IIS7 play nice with Office Interop 的指示,特别是关于启动mmc -32
并手动添加组件服务管理单元的说明,我能够让它出现。 (注意:虽然链接谈到了 IIS7,但我的问题与 Windows 服务有关)。
-
开始 > 运行 > dcomcnfg(或“mmc -32”,如果在步骤 3 下找不到应用,则手动添加组件服务管理单元)
导航到组件服务 > 计算机 > 我的电脑 > DCOM 配置
找到给您带来麻烦的 MS 应用程序(例如:“Microsoft Excel 应用程序”用于 Excel 或“Microsoft Word 97 – 2003 文档”用于 Word)
右键单击>属性
在安全选项卡上:选择启动和激活权限下的自定义,然后单击编辑...
添加运行站点的帐户(例如:网络服务)并分配本地启动和本地激活权限
瞧!
【讨论】:
【参考方案4】:这对我有用:
-
在命令行中输入 DCOMCNFG
组件服务 -> 计算机 -> 我的电脑 -> DCOM 配置
查找“Microsoft Word 97 - 2003 文档”(如果缺少,请检查您的 Word 是否也是 64 位)
右键->属性
转到选项卡安全并编辑“自定义”单选按钮,以便 IIS_IUSRS 可以拥有启动和访问权限
转到标签标识并选择“交互式用户”
应用更改并重试
如果这一切都失败了,还请转到“常规”选项卡并在“身份验证级别”下拉菜单中选择“无”。
【讨论】:
【参考方案5】:这对我来说很棘手,也许我的 Windows mojo 技能只是低于标准。但我无法让组件服务在 Windows Server 2008 上以 32 位模式运行。希望这可以帮助遇到同样问题的其他人:
-
通过前面提到的任一方法(运行框或管理工具)运行组件服务;关闭此程序
将“C:\Windows\System32\mmc.exe”/32 粘贴到“运行”框中,然后按 Enter(在任务管理器中验证您是否看到 mmc.exe *32)
转到文件,您应该会在列表中看到 comexp.msc(由于第 1 步),选择它,它将在您的 32 位模式 MMC 控制台中打开组件服务。
编辑:为了完整起见,为了让 Word Interop 在 Windows Server 2008 上运行,我还必须创建 this answer 中所述的 Desktop 文件夹。
【讨论】:
你可以在运行框中直接使用命令MMC comexp.msc /32
【参考方案6】:
修复 Tomas 的答案,Windows Server 2k8 x64 上的正确命令是:“dcomcnfg /32”(斜线而不是 -)
我还必须通过添加具有午餐和激活权限、访问权限和配置权限的完全权限的 IIS_IUSRS 来自定义所有安全选项。以及身份选项卡中的交互式用户。然后它对我有用。
我在 Word 2010 打开文档文件时遇到了这个问题,我必须为 Microsoft Word 97-2003 文档属性设置它。
【讨论】:
我还认为您需要以管理员身份运行 dcomcnfg 才能正常工作!【参考方案7】:此错误对应于 .NET System.UnauthorizedAccessException,通常是由于您的代码尝试创建的 COM 组件的访问设置错误造成的。
您可以尝试启动 dcomcnfg 实用程序,进入 DCOM 设置,选择所需的对象并允许运行 ASP.NET 代码的帐户访问它。它应该可以解决您的问题。
【讨论】:
这是真的,但如果您运行的是 64 位 Windows 7,则必须将 dcomcnfg 启动为 32 位:“dcomcnfg -32”。如果你不这样做,你将找不到 Word 或 Excel 来设置权限【参考方案8】:我遇到了同样的问题,最后是因为我的用户没有运行“远程过程调用(RPC)”服务的权限。 在控制面板,管理工具中,我查找了该服务,然后在登录中单击“本地系统帐户”,我重新启动系统并解决了问题。
【讨论】:
【参考方案9】:我测试了上述所有方法,这些方法也标记为答案,但在 Windows 服务器中,当用户不活动或注销时,会出现访问异常。所以:
-
我在 本地 计算机上创建了一个用户并将其添加到两个组:
IIS_USER 和 管理员
组件服务 -> 计算机 -> 我的电脑 -> DCOM 配置
在 com+ 对象中,我更改为使用该用户运行 Microsoft Word 97 – 2003 文档组件。
See it here
还添加 IIS_USER 和应用程序身份用户 (IIS
APPpool\[Name]) 到安全部分的所有三个部分,并尽可能获得完全许可。
See it here
office 将使用您在第一步中创建的用户的设置运行,因此如果您更改此用户的任何设置。 120% 工作没有问题。尝试了超过 3 个不同的服务器。
【讨论】:
【参考方案10】:进入注册表HKCR>TypeLib>00020905-0000-0000-C000-000000000046>8.7>0
,然后删除文件夹“win32”这是Word COM Class错误。
转到注册表HKCR>TypeLib>00020813-0000-0000-C000-000000000046>1.9>0
,然后删除文件夹“win32”这是Excel COM Class错误。
试试那个方法,那个方法解决了我的问题。
【讨论】:
【参考方案11】:我创建了文件夹 C:\Windows\System32\config\systemprofile\desktop ,解决了我的服务无法打开 Excel 文件的问题。
【讨论】:
以上是关于System.UnauthorizedAccessException:检索 Word 互操作的 COM 类工厂失败并出现错误 80070005的主要内容,如果未能解决你的问题,请参考以下文章