Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net &引用;正在检索组件的COM类工厂。。。。错误:80070005访问被拒绝。”;(HRESULT异常:0x80070005(E_访问被拒绝))_Asp.net_Excel_Iis - Fatal编程技术网

Asp.net &引用;正在检索组件的COM类工厂。。。。错误:80070005访问被拒绝。”;(HRESULT异常:0x80070005(E_访问被拒绝))

Asp.net &引用;正在检索组件的COM类工厂。。。。错误:80070005访问被拒绝。”;(HRESULT异常:0x80070005(E_访问被拒绝)),asp.net,excel,iis,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

我刚刚创建了一个简单的应用程序,并托管在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位企业版。 服务包2

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

下面是我尝试过的一些解决方案

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

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

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

  • 开始->运行->inetmgr

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

  • 三,。 对于64位(x64),创建此文件夹: C:\Windows\SysWOW64\config\systemprofile\Desktop

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

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

  • 确保服务器上安装了Office runtime
  • 如果您使用的是Windows Server 2008,那么使用office interops是一个较长的配置,以下是步骤
  • 更好的方法是移动到openxml,或者您可以按如下所示进行配置

    • 安装MS Office Pro最新版本(我使用的是2010 Pro)
    • 创建用户ExcelUser。将WordUser分配给管理员组
    • 进入计算机->管理
    • 使用以下选项添加用户
    • 用户选项密码永不过期
    • 无法更改密码
    Com+配置

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

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

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


    请参阅此处的帖子:,

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

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

    应用程序的目标处理器是什么?我猜它是
    x86
    ——所以要么将它设置为
    x64
    或者
    anycpu

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


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

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

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

    链接到OpenXML SDK下载:

    用于读取和写入excel。它是免费的、开源的

    例如

    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));
            }
        }
    }  
    
    使用NPOI.HSSF.UserModel;
    使用NPOI.SS.UserModel;
    //.....
    私有无效按钮1\u单击(对象发送者,事件参数e)
    {
    HSSFW工作手册hssfwb;
    使用(FileStream file=newfilestream(@“c:\test.xls”、FileMode.Open、FileAccess.Read))
    {
    hssfwb=新的HSSFW工作手册(文件);
    }
    ISHET表=hssfwb.GetSheet(“Arkusz1”);
    
    对于(int row=0;row我的解决方案是更改启动应用程序池的用户(ApplicationPoolIdentity显然没有足够的权限访问COM对象)

    祝你好运!

    用这个

    在管理组中创建用户 在web配置中添加此用户详细信息,如下所示
    
    `在这里输入代码`
    
    重新启动IIS并再次检查
    -tony-

    尝试执行以下操作:

  • 确保已安装Office互操作程序集
  • 在开发和生产时检查程序集的版本
  • 在systemprofile下创建桌面文件夹
  • 为服务用户显式设置DCOM安全性

  • 您可以找到更多详细信息

    有时,您创建了新的应用程序池,但无法通过DCOMCNFG解决。然后还有另一种方法可以执行:

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


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

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

    *安装互操作程序集:您可以从Microsoft网站安装 *检查程序集版本:检查开发和生产计算机上程序集的版本。程序集将位于GAC中,在widows 7中,此文件夹为%windir%\assembly。

    *创建桌面文件夹:服务使用systemprofile下的桌面文件夹,因此您需要创建此文件夹(如果不存在),以下是文件夹的位置: 对于64位应用程序:C:\Windows\SysWOW64\config\systemprofile\Desktop 32
    <system.web>
       <identity impersonate="true"
        userName="User Name"
        password="Password" />
        `enter code here`</system.web>
    
    C:\WINDOWS\SysWOW64>mmc comexp.msc /32