“检索组件的COM类工厂....错误:80070005访问被拒绝。” (HRESULT异常:0x80070005(E_ACCESSDENIED))

时间:2013-07-22 10:19:41

标签: asp.net excel iis

我刚刚创建了一个简单的应用程序并托管在 IIS6.0 中。在代码中,我只是实例化excel对象。

using excel = Microsoft.Office.Interop.Excel.Application;

namespace TestHosting
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            excel excelObj=new Microsoft.Office.Interop.Excel.Application();
        }
    }
}

它给了我以下错误

 "Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80070005 Access is denied." (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)).

系统配置:

Windows Server 2008,64位企业版。 Service Pack 2

我尝试了在互联网上找到的许多可能的解决方案,但没有一个能为我工作。

我试过的一些解决方案在

之下

1)在“C:\ Windows \ SysWOW64 \ config \ systemprofile”路径下创建桌面应用程序 2)在DCOMCNFG中为Microsfot.EXcelApplicaiton设置完全权限/控制 3)在任务管理器中杀死所有excel实例

请帮助我这方面,这只是示例应用程序,但在我的原始应用程序主要是关于从/向Excel读取和写入数据。

15 个答案:

答案 0 :(得分:37)

  1. 确保在服务器上安装了Office运行时。
  2. 如果您使用的是Windows Server 2008,那么使用office interops是一个长期配置,以下是步骤。
  3. 最好转移到Open XML,或者您可以配置如下

    • 安装MS Office Pro Latest(我使用的是2010 Pro)
    • 创建用户ExcelUser。使用管理员组分配WordUser
    • 转到计算机 - >管理
    • 使用以下选项添加用户
    • 用户选项密码永不过期
    • 密码无法更改

    Com +配置

    • 转到控制面板 - >管理员 - >组件服务 - > DCOM配置
    • 打开Microsoft Word 97 - 2003属性
    • 一般 - >身份验证级别:无
    • 安全性 - >自定义所有3个权限以允许所有人
    • 身份 - >此用户 - >使用ExcelUser /密码
    • 启动Excel应用以确保一切正常

    3.在DCOM配置中更改Microsoft Excel应用程序的安全设置。

    控制面板 - >管理工具 - >组件服务 - >计算机 - > myComputer - > DCOM配置 - > Microsoft Excel应用程序。

    右键单击以获取属性对话框。转到“安全”选项卡并自定义权限

    请参阅此处的帖子:Error while creating Excel objectExcel manipulations in WCF using COM

答案 1 :(得分:30)

有时,您创建新的应用程序池并且无法通过DCOMCNFG解决它。然后还有另一种方法:

将应用程序池的标识(模型名称)设置为 LocalSystem

我不知道根本原因,但它一次解决了我的问题。

答案 2 :(得分:5)

回复太迟了。但是,如果这有助于仍然面临问题的人。我解决了这个问题:

→在专用池上设置站点而不是共享池。

→启用32位应用程序支持。

→将应用程序池的标识设置为LocalSystem。

答案 3 :(得分:3)

  1. 向IIS用户或组用户授予读/写权限

  2. 开始 - >跑 - > INETMGR

    为您的默认网站启用ASP.NET身份验证

  3. 3。 对于64位(x64),请创建此文件夹: C:\的Windows \ Syswow64资料\配置\ systemprofile \桌面

    对于32位(x86),创建此文件夹: C:\的Windows \ system32 \设置\ systemprofile \桌面

    如果在systemprofile下运行,Windows服务需要Desktop文件夹。此文件夹是在XP和较旧的Windows Server版本上自动创建的,但不适用于Vista和Windows 2008 Server。

答案 4 :(得分:3)

对我有用的解决方案是更改启动应用程序池的用户(ApplicationPoolIdentity显然没有足够的权限来访问COM对象)。

祝你好运!

答案 5 :(得分:3)

尝试执行以下操作:

  1. 确保已安装Office互操作程序集。
  2. 检查开发和生产中的装配版本。
  3. 在systemprofile下创建桌面文件夹。
  4. 为服务用户明确设置DCOM安全性。
  5. 您可以找到更多详情here

答案 6 :(得分:2)

您是否在服务器上安装了Excel?您正在使用的互操作接口用于自动化 Excel,这需要在那里安装Excel应用程序。每个页面请求周期都可能启动一个单独的excel.exe实例。我强烈建议不要将此作为Web应用程序的一部分。

你为什么要这样做?如果您想要生成Excel文档,那么很多有更好的方法可以做到这一点,包括OpenXML,如本主题其他地方所述。 请不要在服务器上运行Excel!

链接到OpenXML SDK下载:http://www.microsoft.com/en-us/download/details.aspx?id=5124

答案 7 :(得分:1)

这看起来像是一个权限问题。我建议运行processMonitor来确定需要哪些权限。

答案 8 :(得分:1)

  

我刚创建了一个简单的应用程序

该应用程序的目标处理器是什么?我猜这是x86 - 所以要么将其设置为x64anycpu

我认为您遇到的问题是由于64位进程尝试访问32位dll。

此外,如果您无法更改目标处理器,则可以尝试从IIS中的“应用程序池”设置启用32位应用程序。

答案 9 :(得分:1)

使用NPOI来读取和编写excel..it的免费和开源

for exapmle

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;

//.....

private void button1_Click(object sender, EventArgs e)
{
    HSSFWorkbook hssfwb;
    using (FileStream file = new FileStream(@"c:\test.xls", FileMode.Open, FileAccess.Read))
    {
        hssfwb= new HSSFWorkbook(file);
    }

    ISheet sheet = hssfwb.GetSheet("Arkusz1");
    for (int row = 0; row <= sheet.LastRowNum; row++)
    {
        if (sheet.GetRow(row) != null) //null is when the row only contains empty cells 
        {
            MessageBox.Show(string.Format("Row {0} = {1}", row, sheet.GetRow(row).GetCell(0).StringCellValue));
        }
    }
}  

请参阅此Stackoverflow question

答案 10 :(得分:1)

http://www.vbforums.com/showthread.php?657928-failed-due-to-the-following-error-80070005-Access-is-denied

使用此链接,我们可以解决excel,word对象的“拒绝访问”问题。 这是非常有用的链接

答案 11 :(得分:1)

就个人而言,我执行了以下几个步骤:

*安装互操作程序集:您可以从Microsoft的网站https://www.microsoft.com/en-us/download/details.aspx?id=3508&tduid=(09cd06700e5e2553aa540650ec905f71)(256380)(2459594)(TnL5HPStwNw-yuTjfb1FeDiXvvZxhh.R.Q)()安装。

*检查程序集版本:检查开发和生产计算机上的程序集版本。程序集将在GAC中,在寡妇7中,此文件夹是%windir%\ assembly。

*创建一个桌面文件夹:该服务使用systemprofile下的桌面文件夹,因此如果不存在,则需要创建此文件夹,这里是文件夹的位置: 对于64位应用程序:C:\ Windows \ SysWOW64 \ config \ systemprofile \ Desktop 对于32位应用程序:C:\ Windows \ System32 \ config \ systemprofile \ Desktop

*添加DCOM用户权限:
---启动运行窗口并输入'dcomcnfg' ---展开组件服务 - &gt;计算机 - &gt;我的电脑 - &gt; DCOM配置。
---寻找Microsoft Excel应用程序。右键单击它并选择属性,然后选择“安全”选项卡 ---选择“启动和激活权限”下的“自定义”单选按钮和“访问权限”,然后单击“编辑”按钮以添加用户,如下所示。
---------单击“添加”按钮和用户“IIS_IUSRS”和“网络服务”并授予他们完全权限 ---转到“标识”选项卡,然后选择“交互式用户”选项 ---单击“应用”,然后单击“确定”。

答案 12 :(得分:0)

使用此

在管理员组

中创建用户

在web配置中添加此用户详细信息,如下所示

<system.web>
   <identity impersonate="true"
    userName="User Name"
    password="Password" />
    `enter code here`</system.web>

重新启动IIS并再次检查

托尼 -

答案 13 :(得分:0)

两天前遇到这个问题,花了整整两天,所以我发现我需要在IUSR用户组的访问权限 DCOMCNFG - &gt;我的电脑属性 - &gt; Com Security - &gt;启动和激活权限 - &gt;编辑默认值并授予IUSR的所有权利。

希望它会帮助某人......

答案 14 :(得分:0)

如果您尝试在 64 位上进行配置,则必须在以下位置进行 DCOMconfig 配置(请参阅上面的其他答案):

C:\WINDOWS\SysWOW64>mmc comexp.msc /32

根据Setting Process-Wide Security Using DCOMCNFG

此后,我无需管理员权限即可为 IIS_IUSRS 进行配置。