System.UnauthorizedAccessException:为Word Interop检索COM类工厂失败,错误为80070005。
我在Visual Studio 2008中的C#ASP .NET项目有问题当我用Windows 7旗舰版(x64)重新安装我的电脑时,这个问题就开始了。 为此,我也使用Office 2007。
我得到的错误消息是:
System.UnauthorizedAccessException:检索具有CLSID {000209FF-0000-0000-C000-000000000046}的组件的COM类工厂失败,原因是以下错误:80070005. at xxx.Utility.WordDocument..ctor(String filePath,HttpServerUtility util)at在c:\ xxx \ Website \ customer \ communication.aspx.cs中的customer_communication.BuCreate_click(Object sender,EventArgs e):line 127
如果有人能帮助我,我会很感激。
这是我解决这个问题的方法:
我正在使用Win 7 64bit和Office 2007
运行程序“ dcomcnfg -32 ”。 (如果它在64位下运行,你不能find这个单词和excel组件)
转到“控制台根/组件服务/计算机/我的电脑/ DCOMconfiguration/”查找Microsoft Word和Excel并select属性。
转到安全性并select“configuration权限”下的“自定义”(如果需要,您可能还想更改其他权限,但我不需要)添加“IIS_IUSRS”,并给它“完全控制”。
现在进入“身份”并select“交互式用户”。
完成后请勿忘记按“确定”。 :d
我希望这可以帮助你解决你的问题,也可以帮助你解决这个问题。
您应该授予访问用于ASP.NET进程标识的Word COM组件(IIS 5上的{MACHINE} \ ASPNET或IIS 6上的networking服务):
“控制面板 – pipe理工具 – 组件服务 – 计算机 – 我的电脑 – DCOMconfiguration”
find“Microsoft Word文档”,右键单击“设置” – “安全”选项卡 ,为ASP.NET进程标识(IIS 5的“ASPNET”,IIS 6的“networking服务”)授予访问权限(本地和远程)。
如果那么你得到一个“System.Runtime.InteropServices.COMException(0x800A13E9):内存不足,现在保存文档。 当打开/添加文档(我自己的expirience)exception,只是从%Temp%和\ Content.Word文件夹中删除临时文件。
这个对我来说很难理解,也许我的Windows mojo技能只是低于标准。 但是我无法使组件服务在Windows Server 2008上以32位模式运行。希望这可以帮助其他人解决同样的问题:
- 通过前面提到的任一方法运行组件服务(运行框或pipe理工具); closures这个程序
- 将“C:\ Windows \ System32 \ mmc.exe”/ 32粘贴到运行框中,然后按Enter(在任务pipe理器中validation您看到mmc.exe * 32)
- 转到文件,你应该看到列表中的comexp.msc(因为步骤1),select它,它会打开您的32位模式MMC控制台中的组件服务。
编辑:只是为了完整的缘故,为了得到Word Interop在Windows Server 2008上的工作,我也必须创build这个答案中概述的桌面文件夹。
这对我工作:
- 在命令行中放入DCOMCNFG
- 组件服务 – >计算机 – >我的电脑 – > DCOMconfiguration
- 查找“Microsoft Word 97 – 2003文档”(如果缺less,请检查您的Word是否也是64位)
- 右键单击 – >属性
- 转到选项卡安全并编辑“自定义”单选button,以便IIS_IUSRS可以有权启动和访问
- 转到选项卡标识并select“交互式用户”
- 应用更改并重试
- 如果所有这些都失败了,也请select“常规”并在“身份validation级别”下拉select“无”。
启动dcomcnfg -32
或dcomcnfg /32
都无法显示列表中的目标应用程序(Microsoft Excel)。
但是我遵循下面的说明@ 如何让IIS7在Office Interop中很好地发挥 ,尤其是关于启动mmc -32
和在组件服务pipe理单元中手动添加的注意事项,我能够让它出现。 (注:虽然链接谈到IIS7,我的问题是与Windows服务)。
- 开始>运行> dcomcnfg(或“mmc -32”,然后手动添加组件服务pipe理单元,如果在步骤3中找不到该应用程序)
- 导航到组件服务>计算机>我的电脑> DCOMconfiguration
- find给您麻烦的MS应用程序(例如:Excel的“Microsoft Excel应用程序”或Word的“Microsoft Word 97 – 2003 Document”)
- 右键单击>属性
- 在安全选项卡上:select启动和激活权限下的自定义,然后单击编辑…
- 添加站点正在运行的帐户(例如:networking服务),并分配本地启动和本地激活权限
- 瞧!
修复托马斯回答,正确的命令在Windows Server 2k8 x64上是:“dcomcnfg / 32”(斜杠而不是 – )
此外,我不得不通过添加具有午餐和激活权限,访问权限和configuration权限的全部权限的IIS_IUSRS来自定义所有安全选项。 和“身份”选项卡中的交互式用户。 然后它为我工作。
我有Word 2010打开文档文件的这个问题,我不得不将其设置为Microsoft Word 97-2003文档属性。
此错误对应于.NET System.UnauthorizedAccessException,并且通常是由您的代码尝试创build的COM组件访问错误设置造成的。
您可以尝试启动dcomcnfg实用程序,转到DCOM设置,select所需的对象并允许访问您的ASP.NET代码所运行的帐户。 它应该解决你的问题。
我有同样的问题,最后是因为我的用户没有权限运行服务“远程过程调用(RPC)”。 在控制面板,pipe理工具,我找的服务,并在login我点击“本地系统帐户”,我重新启动系统和问题解决。
我testing所有上面的方法,也标记为答案,但在Windows服务器时,用户不活跃或注销,获得访问exception。 所以:
- 我在本地计算机上创build了一个用户,并将其添加到两个组: IIS_USER和Administrator
- 组件服务 – >计算机 – >我的电脑 – > DCOMconfiguration
- 在com +对象中,我更改为与此用户一起运行Microsoft Word 97 – 2003文档组件。 在这里看到
- 还要将IIS_USER和Application-identity用户( IIS APPPool \ [Name] )添加到安全部分的所有三个部分,并尽可能地给予完全权限。 在这里看到
办公室将使用您在第一步创build的用户的设置运行,所以如果您更改此用户的任何设置。 120%工作没有问题。 尝试了3个不同的服务器。