今天将写好的程序部署到服务器上,结果出了几个莫名其妙的问题,搞了一天,终于解决了
总的来说有以下几个需要注意的地方(以下问题均是在远程访问时才会出现)
1.实例化Excel的COM组件的时候,不要直接调用类,要用Microsoft提供的接口
原来的写法:Excel.ApplicationClass excelApp = new Excel.ApplicationClass();//实例化Excel
现在的写法:Excel.Application excelApp = new Excel.ApplicationClass();//实例化Excel
直接调用类的时候,Excel不能关闭,以前采用的强制结束进程的方法在客户端没有权限
使用接口后成功解决该问题
2.不能直接使用Excel.Application.Workbooks.Open()方法打开文件
原来的写法:Excel.Workbook wb = excelApp.Application.Workbooks.Open(FilePath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);//创建WorkBook
现在的写法:Excel.Workbooks wbs = excelApp.Workbooks;
这个问题有点莫名其妙,Workbooks必须要实例化出来,直接越过调用时会报错,而且在本地执行时没问题,远程调用就会出错。现在还是不知道为什么?
3.Excel组件的权限设置
“开始”->“运行”->“dcomcnfg”->“组件服务”->“计算机”->“我的电脑”->“DCOM配置”->“Microsoft Excel 应用程序”->“属性”
“标识”标签里选择“交互式用户”
“安全”标签里全部选择“自定义”,全部添加“ASPNET”用户并赋予权限
4.一些权限配置问题
通过IIS访问文件时,没有修改和删除的权限
需要赋予要操作的文件夹的权限
找了很久终于找到设定的方法
“文件夹选项”->“查看”
取消“使用简单文件共享”的勾选框(这点最重要,害我找了很久...怨念...)
打开要控制的文件夹的属性,这下就会出现了“安全”标签
然后添加“ASPNET”用户并赋予权限
最后,严重鄙视下微软写OFFICE COM组件的家伙,你们TMD就不能写写注释吗???