0

请您帮帮我,将在 Win Server 2003 32 位运行的应用程序迁移到 Win Server 2008 64 位环境时,我的 ASP.NET 应用程序无法导入 excel 文件。如何修复这个错误?因为在 Win Server 2003 32 位中,它可以正常运行。

出现的错误报告是: *System.Runtime.InteropServices.COMException (0x800A03EC): Exception from HRESULT: 0x800A03EC at Microsoft.Office.Interop.Excel.Workbooks.Open(String Filename, Object UpdateLinks, Object ReadOnly, Object Format, Object在 C:\inetpub\wwwroot\ERMApproval\Administrator\ ImportRisk.aspx.vb:第 66 行。*

我的应用程序第 66 行的代码是:oBooks.Open(Server.MapPath("~/App_Data/Risk.xls"))

我尝试了几种情况:

  1. 将网络服务用户添加到 DCOM 配置中的 Microsoft Excel 应用程序中,并将应用程序池的标识设置为与以前相同。

  2. 在 DCOM 配置的安全性中添加了所有多种用户到 Microsoft Excel 应用程序和我的电脑。而且我在应用程序的文件夹中也添加了多种用户。

  3. 使用 corflags.exe 强制 32 位应用程序在 64 位环境中运行

  4. 使用 regsvr32.exe 将 Microsoft.Office.Interop.Excel.dll 文件注册到 windows 32 位组件服务。

  5. 使用rundll32.exe在32位环境下运行32位Microsoft.Office.Interop.Excel.dll文件

但结果还是一样。如果你能帮助我,那将是莫大的荣幸^^。最好的问候,-伊曼纽尔-

4

1 回答 1

0

简单的答案是将您的项目编译为仅针对 x86。这是项目设置中的设置。所以 .net 框架在运行时只会生成一个 32 位的应用程序,而不是默认为 64 位。这与设置 corflags 没有什么不同,但是如果您有多个程序集,您必须确保所有程序集都已完成。应用程序本身必须仅针对 32 位。

您正在使用 32 位的 COM 组件,而您不能在 64 位应用程序中执行此操作,因此请强制它为 32 位。

您还可以强制 IIS 在 32 位上下文中运行它,如此处所述:

http://lostechies.com/gabrielschenker/2009/10/21/force-net-application-to-run-in-32bit-process-on-64bit-os/

此外,请确保服务器上未安装 64 位版本的 Excel,而是安装 32 位版本。

于 2011-07-28T06:55:47.977 回答