我快崩溃了...我是要把查询的数据 在服务器上生成excel,然后发送到客户端下载。
现象:1.本地vs调试,可以出现下载对话框,可以正确下载。2.在03上发布后,远程访问,服务器可以生成excel,但不出现下载对话框,而是报:拒绝访问。我想应该是权限问题。于是...
cmd -> dcomcnfg -> 组件服务 -> 我的电脑 -> DCOM配置 ->Microsoft Excel Application标识:交互式用户
安全:启动和激活权限、访问权限 我都自定义,一怒之下加了everyone,能点的勾我都点了。还是不行...我又在Web.config 的<system.web> 下加了 <identity   impersonate="true"   />还是不行...
-----------------------我又用一个winxp系统做服务器,Dcom配置后 测试,远程访问 可以正确导出 excel...
-----------------------崩溃了,03上还要设置什么吗?google后 有人说把 machine.config 中的 UserName值 改成 "system"。我崩溃,怎么能这么干...
-----------------------我觉得程序应该没有什么问题,应该是远程访问的权限问题,但还要什么要配置的呢?

解决方案 »

  1.   

    汗~~
    若要授予   ASP.NET   对文件的写访问权,请在资源管理器中右击该文件,选择“属性”,然后选择“安全”选项卡。单击“添加”添加适当的用户或组。突出显示   ASP.NET   帐户,选中所需访问权限对应的框。   
      你操作的文件的属性
      

  2.   

    服务器可以生成excel,但不出现下载对话框??那就是生成没有问题,读取的时候出的问题..下载部分代码能否帖出来
      

  3.   


    这个 我对整个文件夹 直接 everyone 然后能勾的 都勾了...
      

  4.   

    有没有临时存储Excel的文件夹,开放其读写权限看看
      

  5.   

    不然会报 没有对那个excel文件 操作的权限的。
      

  6.   


    下载很简单的,别的地方也用了,文件上传后,能下载下来...
     FileInfo fi = new FileInfo(Server.MapPath("UnicomInfo.xls"));
                    if (fi.Exists)
                    {
                        fi.Delete();
                        InteHel_ExcelLoadBLL.ExportReportForXLS(ds.Tables[0], Server.MapPath("mytest.xls"), Server.MapPath("UnicomInfo.xls"), dt);
                        Response.Clear();
                        Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(fi.Name));
                        Response.AddHeader("Content-Length", fi.Length.ToString());
                        Response.ContentType = "application/octet-stream";
                        Response.Filter.Close();
                        Response.WriteFile(fi.FullName);
                        //Response.End();
                        HttpContext.Current.ApplicationInstance.CompleteRequest(); 
                        //Response.Redirect("NowkaweiData.aspx?TheOrgName=" + theorg);
                    }
      

  7.   


    我是直接发送生成的excel,没有涉及到临时存储啊。
      

  8.   

    能 否 试 下: 存 在 的 EXCEL文件是否能下载..
      

  9.   

    把生成的excel文件,放到IIS,设置文件目录共享,然后让客户机访问服务器的IP地址,这样更好下载啊
      

  10.   

    这个我刚做过,要是你用我的办法的话,请联系我。(IIS发布的文件共享目录完成的)
      

  11.   


    能,我文件上传到03服务器上,然后就用那段简单的代码下载的...而且我用xp做服务器 测试,配置dcom 后 远程可以下载。
    Response.Clear();
                        Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(fi.Name));
                        Response.AddHeader("Content-Length", fi.Length.ToString());
                        Response.ContentType = "application/octet-stream";
                        Response.Filter.Close();
                        Response.WriteFile(fi.FullName);
                        HttpContext.Current.ApplicationInstance.CompleteRequest(); 
    这个下载的代码 没有什么关系吧...
      

  12.   


    先声明:我们的文件也是动态生成的。文件夹并没有设置成共享!!!!!!!
    iis目录共享等同于下载。。
      

  13.   

    单独生成,单独下载都没有问题..只有放到一起就出问题..还是咨询一下热情的wxd_860825吧..
      

  14.   

    能否生成 excel文件后,转到一个中转页面,用BUTTON触发下载事件..也比较友好..
      

  15.   

    楼主这种情况,应该是服务器上存储Excel的文件夹没有权限造成的。在服务器上,该文件夹,右键=》安全=》添加IIS_WPG用户,然后给予改用户的读写权限就好了:)
      

  16.   


    我加了 everyone 不可以?
      

  17.   


    哥们,我分开了,但生成excel后,并没有执行跳转,而是直接报: 拒绝访问。这是怎么回事? 而且打开模板后,生成excel 速度相当慢...
      

  18.   

    通过二维数组赋值给单元格
    在文件夹添加net services操作权限
    在COM组件里配置net services 权限
    通过response.write输出文件
      

  19.   

    public void FileToExcel(System.Web.UI.Page page,string File)
    {
    string Pa=page.Server.MapPath(@"../Template_temp/"+File+"");
    page.Response.AppendHeader("Content-Disposition","attachment;filename="+File+"");
    page.Response.ContentType ="application/ms-excel"; 
    page.Response.WriteFile(Pa);
    page.Response.End();
    }
      

  20.   

    之前好像遇到过这个问题
    但是我的好像就配置下那些组策略之类的就好了你看这里面的回复,能不能对你有些帮助
    http://topic.csdn.net/u/20090209/15/9851234f-0c84-4894-a5da-0e460a8e30f9.html
      

  21.   

    生成excel 后, 就出现 拒绝访问 ,连跳转都不行 。
      

  22.   

    你的导出excel代码是没有问题的。还是权限的问题。
    在文件夹上右击->属性->安全->把里面的所有组或用户名删除->高级->权限->添加->找一个你觉得合适的用户加进来->选中下面的两个复选框(从父项继承... 用在此显示的...)->确定
    然后再设置权限就可以了。
    这个试XP的,03应该差不多。
      

  23.   

    额。。我上面说错了,这样:
    在文件夹上右击->属性->安全->把里面的所有组或用户名删除->高级->所有者->选着administrator->(勾选 替换子容器及对象)->确定 
    然后再设置权限就可以了。 
    这个试XP的,03应该差不多。
      

  24.   

    我用xp做 服务器测试可以。但03怎么搞就是不行...我让 生成 excel 后 进行Response.Redirect但不执行跳转。 而是直接报: 拒绝访问
      

  25.   

    不是everyone 能解决的!
    修改下 存放生成excel文件夹的权限
      

  26.   

    没那么复杂,肯定是一个很小的设置问题。
    你可以把生成excel和下载excel当成两件事看待,生成已经成功了,那么就解决下载呗,
    1、检查excel的目录是不是再web网站下面,
    2、检查文件夹的权限,不要设everyone,设netservicec就可以了,最多设iiswpg,
    3、给iis加excel的MIME类型,
    4、如果第三版之后能用浏览器打开,再用流下载,一定可以。
      

  27.   

    我又看了一下你的帖子和一些回复,你就在IIS加个MIME类型就可以了,值为:
    xls application/vnd.ms-excel
      

  28.   


    给iis加excel的MIME类型 ? 意义何在?
      

  29.   


    哥,everyone,netservicec,iiswpg, 
    我能给的都给了...
      

  30.   

    可能生成EXCEL的进程没有释放。
      

  31.   

    如果我没猜错的话,你是在oExcel     =     new     Excel.Application();     这句话出现这个异常的;   
      我的解决办法是;     
      打开dcomcnfg(在程序   --   运行   里键入dcomcnfg就可进去(如果出现选择,选择"否")),然后找到“microsoft   Excel   应用程序”,双击它,然后在它的"安全性"里,把“使用默认的使用权限”全部改成“使用自定义使用权限”,当然每个自定义使用权限都要通过对应的"编辑   ---   添加"来改写。   试试吧,
      

  32.   

    这个主要是iis的安全问题,涉及到权限问题。你这样设置就可以解决问题   
        首先找到你生成的文件要放的那个文件夹--属性--安全--添加   
      添加用户(everyone)然后选在权限里择--完全控制,保存就ok了

    解决办法:
       在服务器上点击开始—运行—输入:Dcomcnfg然后回车,系统将弹出分布式COM配置属性窗体,在“应用程序”页里面选择“Microsoft Excel 应用程序”,点击“属性”按钮,系统将弹出该应用程序的属性窗体。在“常规”页中的身份验证级别下拉列表中选择“无”,在“安全性”页中选中“使用自定义访问权限”和“使用自定义启动权限”,然后分别点击访问用户和启动用户对应的“编辑”按钮,在里面添加用户“everyone”;最后在“身份标示”页里面选中“交互式用户”。
      

  33.   


    老哥 说的很有道理,不过我kill了,难道还不行?
     #region file save                workBook.SaveAs(outputFilePath, missing, missing, missing, missing, missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, missing, missing, missing, missing,false);
                    workBook.Close(null, null, null);
                    app.Workbooks.Close();
                    app.Application.Quit();
                    app.Quit();                System.Runtime.InteropServices.Marshal.ReleaseComObject(workSheet);
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(workBook);
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(app);                workSheet = null;
                    workBook = null;
                    app = null;                GC.Collect();
                    #endregion
                }
                catch (System.Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    #region 关闭在导出报表期间创建的Excel进程
                    Process[] myProcesses;
                    DateTime startTime;
                    myProcesses = Process.GetProcessesByName("Excel");                //得不到Excel进程ID,暂时只能判断进程启动时间
                    foreach (Process myProcess in myProcesses)
                    {
                        startTime = myProcess.StartTime;                    if (startTime > beforeTime && startTime < afterTime)
                        {
                            myProcess.Kill();
                        }
                    }
                    #endregion
      

  34.   

    你导出的 excel有特殊的格式要求吗?如果没有,无需使用Excel.Applicaton
      

  35.   

    你直接放个excel文件在网站里面,在iis加mime类型后,输入地址不能访问????????
      

  36.   

    或 aspnet帐号的权限不够,不能启动访问Excel应用程序组件
    解决办法:
        1.   "控制面板-管理工具-组件服务" 打开"组件服务"窗口
        2.  依次展开左侧的树:"组件服务|计算机|DCOM配置",右击"Microsoft Excel应用程序",选择"属性"
        3.  切换到"安全"tab页,将"启动和激活权限","访问权限",均设置为"自定义",然后单击"编辑"按钮将aspnet帐户添加进去.
      

  37.   

    在web.config   
      <identity   impersonate="true"/>   
      

  38.   

    运行--->dcomcnfg--->应用程序---》Microsoft   Excel应用程序---》安全性---》您可以编辑能启动该应用程序的用户---》添加账号ASPNET   
      

  39.   

     运行--->dcomcnfg--->应用程序---》Microsoft   Excel应用程序---》安全性---》您可以编辑能启动该应用程序的用户---》添加账号ASPNET   
      不要把ASPNET帐号加入Administrators组!否则后患无穷!
      

  40.   

    开始->运行->dcomcnfg   Component Serivices    -Computer       -My Computer   在DCOM Config 中找到"Microsoft Excel Application".在XP系统,我添加了IIS默设用户:Internet Guest Accout(Computername/IUSER_USER),即 如果找不到该用户可点击"Add(添加)"->"Advanced(高级)",用"Find now(立即查找)"找到相应的用户。添加进去以后,把"Local launch(本地启动)"和"Local Activation(本地激活)"在允许权限框里打勾。
      

  41.   


    03应该 添加的是 network services 吧。
      

  42.   

    不行就换一个导出excel的方法试试吧
    http://blog.csdn.net/jinkunaier/archive/2009/06/21/4286078.aspx
      

  43.   

    我就是 定义了一个 excel 模板,然后用 excel2007导出...导出的excel是 03格式的。excel 生成了,但生成后 就报: 拒绝访问的错误。
      

  44.   


    大哥,我上传的excel 是可以下载的。我加了 mime类型 ,生成 excel后,还是 出现 拒绝访问。
      

  45.   


    internet 来宾账户 我也加了...也勾了...还是不行,我曰...
      

  46.   


    兄弟,你真的提醒了我。 xp下 excel.exe被 kill了,但03下 并没有被kill.这应该就是关键了。
      

  47.   

    <identity impersonate="true" userName="Administrator" password="Administrator账户的密码" /> 
      

  48.   


    呵呵,最后我放弃了...实在搞死我了,不知道怎么回事...---------------------------------------------我换了种方法  Reading and Writing Excel using OLEDB虽然没有 using Microsoft.Office.Interop; 做出来的那么花哨,不过也省去了在服务器端安装excel的
    麻烦...有得必有失...
      

  49.   

    UnauthorizedAccessException: Access to the path 'c:\windows\system32\inetsrv\btw3.tmp' is denied
      

  50.   

    UnauthorizedAccessException: Access to the path 'c:\windows\system32\inetsrv\btw3.tmp' is denied
    高手们帮忙解决一下,给文件夹添加安全账户“ASPNET”已经试过了,不行。