检索用于组件的COM类工厂失败。

27

我正在使用excel对象(COM组件)进行excel操作。在我的电脑上它能够正常工作,但是当我将应用程序部署到我们的Intranet上时,出现以下错误:

由于以下错误:80070005,检索具有CLSID {00024500-0000-0000-C000-000000000046}的组件的COM类工厂失败。

我正在使用Windows身份验证并在我的web.config文件中设置了impersonate = true。

我已经在组件服务中进行了所有设置,但仍然出现相同的错误。

请帮忙解决。


1
你在这个问题中找到可行的解决方案了吗?我也遇到了同样的问题。我正在运行一个 VB.Net 应用程序,而不是 Asp.Net。 - Yanick Rochon
没关系,我需要从Office安装程序中安装Excel的.Net功能。我太傻了。 - Yanick Rochon
11个回答

25

当我部署我的应用程序时,我遇到了同样的错误。我从这个网站得到了解决方案:Component with CLSID XXX failed due to the following error: 80070005 Access is denied

以下是解决方案:

  1. DCOMCNFG中,右键单击My Computer并选择properties

  2. 选择COM Securities选项卡。

  3. Access Permissions中,点击Edit Defaults并添加Network Service,并给予Allow local access权限。对于< Machine_name >\Users也是如此。

  4. Launch and Activation Permissions中,点击Edit Defaults并添加Network Service,并给它Local launchLocal Activation权限。对于< Machine_name >\Users也是如此。

*我使用了表单身份验证。


我记不得我用的是哪个系统版本了。你试过这个解决方案吗? - Monic
这对我有用,在寻找解决方案约10个小时后。其他解决方案提到更改权限的特定程序,或更改二进制(dll)构建。这里提到了根目录(我的电脑)和正确的“用户”。+1。 - Ganesh Jadhav
将权限添加到所有组件中存在安全风险。最好只向需要它们的特定组件授予权限。 - ciencia

6
这对我很有用: (来源于msdn论坛的解决方案)
1. 进入控制面板 -> 管理工具 -> 组件服务 -> 计算机 -> 我的电脑 -> DCOM Config -> Microsoft Excel 应用程序。 2. 右键单击以获取属性对话框。 转到安全选项卡并相应地自定义权限。 3. 在启动和应用程序权限中,选择“自定义”,然后单击“编辑”。 添加调用应用程序的用户/组。

5
如果您使用 Windows 2008 ServerIIS7,您可能需要解决另一个问题。服务器可能会报告以下错误:
Microsoft Office Excel 无法访问文件 'c:\temp\test.xls'。有几个可能的原因:
- 文件名或路径不存在。 - 文件正在被另一个程序使用。 - 您要保存的工作簿与当前打开的工作簿名称相同。
解决方案在此处发布(查找用户Ogawa发布的文本):http://social.msdn.microsoft.com/Forums/en-US/innovateonoffice/thread/b81a3c4e-62db-488b-af06-44421818ef91?prof=required

1
+1000 对于服务器 2008 x64 添加文件夹 C:\Windows\SysWOW64\config\systemprofile\Desktop 成功! - dotjoe

4

当系统中存在陈旧的EXCEL.EXE进程时(使用任务管理器 --> 进程选项卡查看),您也会收到此错误。

关闭所有这些实例,应用程序将正常工作。


2
我已在IIS 8.5(Windows Server 2012 R2)服务器上完成了以下操作,并且在我的情况下工作正常,无需重新启动:
  1. 选择连接到IIS中应用程序的应用程序池
  2. 右键单击-->高级设置-->进程模型-->选择本地系统而不是推荐的应用程序池身份
  3. 确保C:\Windows\SysWOW64\config\systemprofile\desktop对用户有足够的访问权限。
  4. 刷新与此池连接的网站链接


enter image description here


1
你正在为应用程序池分配高权限。这会使你的服务器容易被黑客攻击。 - ciencia

2
如果有所帮助:
我正在运行Windows 7 64位,并想要注册32位dll。
首先,我尝试使用命令“regsvr32 ”,但是出现了以下错误:
System.Runtime.InteropServices.COMException (0x80040154):由于以下错误而检索具有CLSID {A1D59B81-C868-4F66-B58F-AC94A4A7982E}组件的COM类工厂失败:80040154。
然后我尝试通过组件服务(运行-> DCCOMCNFG)添加应用程序,但出现了以下错误:
System.UnauthorizedAccessException:由于以下错误而检索到具有CLSID {A1D59B81-C868-4F66-B58F-AC94A4A7982E}组件的COM类工厂失败:80070005。
有很多解决方案的链接,但对我有用的是:
控制台根 -> 组件服务 -> 计算机 -> 我的计算机 -> COM+应用程序 -> <em>your_application_name</em> -> 属性:安全选项卡:授权:取消选中“强制访问检查此应用程序”。
我不知道它的作用。

1
我能理解你的痛苦。在我的情况下,通过执行以下步骤解决了错误:
  1. 开始 > 运行 > dcomcnfg。
  2. 打开 DCOM Config 文件夹,选择 Component Services > Computers > My Computer > DCOM Config。
  3. 选择“Microsoft Office Word 97 - 2003 document” / “Microsoft Excel Application”,并进入其属性。
  4. 在“安全性”选项卡中,将“启动和激活权限”设置为自定义(授权用户)。
  5. 现在进入 IIS,选择 Web 的应用程序池,进入其高级设置,并选择“NETWORK SERVICE”作为标识用户。
希望这可以帮到你。

1

当我试图从Act!导出CSV文件到Excel时,我遇到了相同的错误。 我找到的一个解决方法是以管理员身份运行Act!

这告诉我这可能是某种权限问题,但这里之前的任何答案都没有解决问题。 我尝试运行DCOMCNFG并更改整个计算机的权限,我还尝试仅更改Excel组件的权限,但它未在我使用的Windows 10 Pro PC中列出在DCOMCNFG中。

也许这个解决方法会帮助某人直到找到更好的解决方案。


那对我有效 - 谢谢! - Tom A

0

对于IIS 8,我基本上和Monic做了一样的事情。在x64机器上,我将我的应用程序作为自己的应用程序池运行。

1. 在DCOMCNFG中,右键单击“我的计算机”,选择属性。

2. 选择COM安全选项卡。

3. 在访问权限中,单击编辑默认值,添加iis apppool\myapp并授予本地访问权限。同样,对iis apppool\myapp执行相同操作。

4. 在启动和激活权限中,单击编辑默认值,添加iis apppool\myapp并授予本地启动和本地激活权限。同样,对iis apppool\myapp执行相同操作。

此外,我还必须创建C:\Windows\SysWOW64\config\systemprofile\Desktop下列出的文件夹,并向iis apppool\myapp授予读取\写入权限。


0

你所描述的CLSID是Microsoft.Office.Interop.Excel.ApplicationClass。这个类基本上通过InprocServer32启动excel.exe。如果你没有安装它,那么它将返回你收到的错误消息。


是的,服务器上没有安装Excel。除了在服务器上安装Excel外,是否有其他使用Interop的方法?我之所以问这个问题是因为我无法访问在服务器上安装任何其他软件。 - Umer Farooq
我认为没有。Excel.exe有点像引擎。您可能能够在另一台计算机上(该计算机具有Excel)开发Web服务,然后从服务器调用该Web服务来处理请求并发送结果。这需要强大的Windows和.NET编程技能。还有第三方库可用于操作Excel文档。 - user2074102
@UmerFarooq 如何创建简单的Web服务 https://support.microsoft.com/zh-cn/kb/308359 。在Web服务中返回大量数据 https://msdn.microsoft.com/zh-cn/library/aa528822.aspx 。 - user2074102

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