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 -32dcomcnfg /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的主要内容,如果未能解决你的问题,请参考以下文章