“检索COM类工厂的组件…错误:80070005访问被拒绝。”(从HRESULTexception:0x80070005(E_ACCESSDENIED))

我刚刚创build了一个简单的应用程序,并在IIS6.0中托pipe。 在代码中,我只是实例化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)). 

系统configuration:

Windows Server 2008,64位企业版。 服务包2

我试着用互联网上find的许多可能的解决scheme,但没有一个为我工作。

我尝试的一些解决scheme如下

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

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

  1. 确保在服务器上安装了Office运行时。
  2. 如果您使用的是Windows Server 2008,那么使用Office Interop是一个简单的configuration,下面是步骤。

更好的是转移到Open XML,或者你可以configuration如下

  • 安装MS Office Pro最新(我用2010 Pro)
  • 创build用户ExcelUser。 分配WordUser与pipe理员组
  • 转到计算机 – >pipe理
  • 添加用户以下选项
  • 用户选项密码永不过期
  • 密码不能改变

Com +configuration

  • 转到控制面板 – >pipe理员 – >组件服务 – > DCOMconfiguration
  • 打开Microsoft Word 97 – 2003属性
  • 一般 – >authentication级别:无
  • 安全 – >自定义所有3个权限,以允许每个人
  • 身份 – >这个用户 – >使用ExcelUser /密码
  • 启动Excel应用程序以确保一切正常

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

控制面板 – >pipe理工具 – >组件服务 – >计算机 – > myComputer – > DCOMconfiguration – > Microsoft Excel应用程序。

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

看到这里的post: 创buildExcel对象时出错 , 使用COM的WCF中的Excel操作

有时,您创build新的应用程序池,无法通过DCOMCNFG解决它。 那么还有另一种方法可以做到:

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

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

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

  2. 开始 – >运行 – > inetmgr

    启用默认网站的ASP.NET身份validation

3.对于64位(x64),创build此文件夹:C:\ Windows \ SysWOW64 \ config \ systemprofile \ Desktop

对于32位(x86),请创build以下文件夹:C:\ Windows \ System32 \ config \ systemprofile \ Desktop

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

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

祝你好运!

尽量做到以下几点:

  1. 确保Office互操作程序集已安装。
  2. 检查开发和生产中的组件版本。
  3. 在systemprofile下创build桌面文件夹。
  4. 为服务用户明确设置DCOM安全性。

你可以在这里find更多的细节

来不及回复。 但是,如果这帮助仍然面临问题的人。 我通过以下方式修复

→在专用池中设置站点,而不是共享一个站点。

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

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

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

你为什么要这样做? 如果你想生成Excel文档,有很多更好的方法来做到这一点,包括在这个线程的其他地方提到的OpenXML。 请不要在服务器上运行Excel!

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

这看起来像一个权限问题。 我build议运行processMonitor来确定需要什么权限。

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

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

我认为你遇到的问题是由于一个64位进程试图访问一个32位的DLL。

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

使用NPOI来读写excel。它是免费和开源的

为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的问题

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

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

就我个人而言,我跑了这些确切的步骤:

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

*检查程序集版本:检查开发和生产机器上的程序集版本。 程序集将在GAC中,在widows 7这个文件夹是%windir%\ assembly。

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

*添加DCOM用户权限:
—启动运行窗口并input“dcomcnfg”。
—展开组件服务 – >计算机 – >我的电脑 – > DCOMconfiguration。
—查找Microsoft Excel应用程序。 右键单击它并select属性,然后select安全选项卡。
—select“启动和激活权限”和“访问权限”下的“自定义”单选button,然后单击编辑button以添加用户,如下所示。
———点击添加button和用户的IIS_IUSRS和networking服务,给他们完整的权限。
—转到标识选项卡并select“交互式用户”选项。
—点击应用并确定。

用这个

在pipe理员组中创build一个用户

在下面的webconfiguration中添加这个用户的详细信息

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

重新启动IIS并再次检查

-tony-

在这个问题两天后,花了整整两天,所以我发现,我需要在DCOMCNFG – >我的电脑属性 – > Com安全 – >启动和激活权限访问IUSR用户组 – >编辑默认值,并授予IUSR的所有权利。

希望它会帮助某人….