System.UnauthorizedAccessException:检索Word Interop的COM类工厂失败,错误80070005

时间:2009-09-29 07:52:19

标签: c# .net windows-7

我在Visual Studio 2008中遇到了C#ASP .NET项目的问题 当我使用Windows 7 Ultimate(x64)重新安装计算机时,此问题就开始了。对此我也使用Office 2007.

我收到的错误消息是:

  

System.UnauthorizedAccessException:由于以下错误,检索具有CLSID {000209FF-0000-0000-C000-000000000046}的组件的COM类工厂失败:80070005。      at xxx.Utility.WordDocument..ctor(String filePath,HttpServerUtility util)      at customer_communication.BuCreate_click(Object sender,EventArgs e)位于c:\ xxx \ Website \ customer \ communication.aspx.cs:第127行

11 个答案:

答案 0 :(得分:31)

以下是我对此问题的解决方法:

我正在使用Win 7 64位和Office 2007

运行程序“ dcomcnfg -32 ”。 (如果它在64位下运行,你就找不到单词和excel组件)

转到“控制台根目录/组件服务/计算机/我的电脑/ DCOM配置/” 查找Microsoft Word和Excel并选择属性。

转到安全性并选择“配置权限”下的“自定义”。(如果需要,您可能也想更改其他权限,但我不需要) 添加“IIS_IUSRS”并将其命名为“完全控制”。

现在转到“身份”并选择“交互式用户”。

完成后不要忘记按“确定”。 :d

我希望这可以帮助您解决问题以及其他来到这里并阅读此内容的人。

答案 1 :(得分:8)

您应该为ASP.NET进程标识(IIS 5上的{MACHINE} \ ASPNET或IIS 6上的网络服务)授予对Word COM组件的访问权限:

“控制面板 - 管理工具 - 组件服务 - 计算机 - 我的电脑 - DCOM配置”

找出“Microsoft Word文档”,右键单击 - 设置 - 安全选项卡,为ASP.NET进程标识授予访问权限(本地和远程)(IIS 5的“ASPNET”,“网络服务”) “对于IIS 6)。


如果那时你得到一个“System.Runtime.InteropServices.COMException(0x800A13E9):内存不足。立即保存文件。”打开/添加文档(我自己的expirience)时出现异常,只需删除%Temp%和\ Content.Word文件夹中的临时文件。

答案 2 :(得分:5)

这个对我来说很难搞清楚,也许我的Windows mojo技能只是低于标准杆。但我无法在Windows Server 2008上以32位模式运行组件服务。希望这可以帮助其他人解决同样的问题:

  1. 通过前面提到的任一方法运行组件服务(运行框或管理工具);关闭这个程序
  2. 将“C:\ Windows \ System32 \ mmc.exe”/ 32粘贴到“运行”框中,然后按Enter键(在任务管理器中验证您看到mmc.exe * 32)
  3. 转到文件,您应该在列表中看到comexp.msc(因为步骤1),选择它,它将在32位模式MMC控制台中打开组件服务。
  4. 编辑:为了完整起见,为了让Word Interop在Windows Server 2008上工作,我还必须按照this answer中的说明创建Desktop文件夹。

答案 3 :(得分:5)

启动dcomcnfg -32dcomcnfg /32都无法在列表中显示目标应用(Microsoft Excel)。

但我遵循指示@ How to make IIS7 play nice with Office Interop,特别是有关启动mmc -32并手动添加“组件服务”管理单元的说明,我能够将其显示出来。 (注意:虽然该链接谈到IIS7,但我的问题是Windows服务)。

  1. 开始>运行> dcomcnfg(或“mmc -32”然后手动添加“组件服务”管理单元,如果在步骤3中找不到该应用程序)
  2. 导航至组件服务>电脑>我的电脑> DCOM配置
  3. 找到麻烦的MS应用程序(例如:Excel的“Microsoft Excel应用程序”或Word的“Microsoft Word 97 - 2003文档”)
  4. 右键单击>特性
  5. 在安全选项卡上:选择启动和激活权限下的自定义,然后单击编辑...
  6. 添加运行该网站的帐户(例如:网络服务)并指定Local Launch&本地激活权限
  7. 瞧!

答案 4 :(得分:5)

这对我有用:

  1. 在命令行中输入DCOMCNFG
  2. 组件服务 - >计算机 - >我的电脑 - > DCOM配置
  3. 查找“Microsoft Word 97 - 2003文档”(如果缺少检查您的Word是否也是64位)
  4. 右键单击 - >特性
  5. 转到选项卡安全性并编辑“自定义”单选按钮,以便IIS_IUSRS可以拥有启动和访问权限
  6. 转到标签标识并选择“交互式用户”
  7. 应用更改并重试
  8. 如果所有这些都失败了,请同时转到“常规”标签,然后在“身份验证级别”下拉列表中选择“无”。

答案 5 :(得分:2)

修复Tomas的答案,Windows Server 2k8 x64上的正确命令是:“dcomcnfg / 32”(斜杠而不是 - )

此外,我必须通过添加具有午餐和激活权限,访问权限和配置权限的完全权限的IIS_IUSRS来自定义所有安全选项。还有“身份”选项卡中的交互式用户。然后它对我有用。

我在使用Word 2010打开doc文件时出现此问题,我必须将其设置为Microsoft Word 97-2003文档属性。

答案 6 :(得分:1)

此错误对应于.NET System.UnauthorizedAccessException,通常是由您的代码尝试创建的COM组件访问的错误设置引起的。

您可以尝试启动dcomcnfg实用程序,转到DCOM设置,选择所需对象并允许对运行ASP.NET代码的帐户进行访问。它应该可以解决你的问题。

答案 7 :(得分:0)

我遇到了同样的问题,最后是因为我的用户没有权限运行“远程过程调用(RPC)”服务。 在控制面板,管理工具中,我查找了该服务,在登录中我单击了“本地系统帐户”,我重新启动了系统并解决了问题。

答案 8 :(得分:0)

我测试了所有上述方法,这些方法也标记为答案,但在用户未处于活动状态或注销时在Windows服务器中,获取访问异常。这样:

  1. 我在本地计算机上创建了一个用户,并将其添加到两个组: IIS_USER 管理员
  2. 组件服务 - >计算机 - >我的电脑 - > DCOM配置
  3. 在com +对象中,我更改为使用此用户运行Microsoft Word 97 - 2003文档组件。 See it here
  4. 还添加 IIS_USER 以及应用程序标识用户( IIS APPPool \ [Name] )到安全部分的所有三个部分并尽可能获得完全权限。 See it here
  5. office将使用您在第一步中创建的用户的设置运行,因此如果您使用此用户更改任何设置。 120%没有问题。尝试了3个不同的服务器。

答案 9 :(得分:0)

转到注册表HKCR>TypeLib>{00020905-0000-0000-C000-000000000046}>8.7>0,然后删除文件夹“ win32 ”,这是由于Word COM类错误引起的。

转到注册表HKCR>TypeLib>{00020813-0000-0000-C000-000000000046}>1.9>0,然后删除文件夹“ win32 ”,这是因为Excel COM类错误。

尝试那种方法解决我的问题。

答案 10 :(得分:0)

我创建了文件夹C:\ Windows \ System32 \ config \ systemprofile \ desktop,解决了我的服务无法打开Excel文件的问题。