使用64位OLEDBConnection的64位.NET应用程序无法使用X080004005编写Excel电子表格

我有一个读取和写入Excel电子表格的Windows服务应用程序(C#,.NET 4.0框架)。 在Windows 2012服务器/ SP2上,它在32位模式下运行良好。

我已经转换它在64位模式下运行。 我们删除了Access 2007驱动程序,并在服务器上安装了Microsoft Access数据库Engine_x64。 之后启动服务器,以确保。

它仍然可以读取电子表格。 但是,当它试图打开另一个OLEDB连接,用E_FAIL X80004005写入错误时,捕获所有错误types,打开OLEDB连接时。

使用的连接string是:

connectionstring = "Provider=Microsoft.ACE.OLEDB.12.0; " +                   "Data Source=" + responseExcelFile + ";"                   + @"Extended Properties=""Excel 12.0;"""; 

注意我已经用IMEX=1;HDR=YES试过了,尽pipe我们得到了相同的结果,而且这些选项似乎是读取电子表格而不是写入。

我意识到的一件事情是连接stringdata source中的responseExcelFile只是一个文件名,而现在还不存在,因为我们要写入它。 但是,使用OLEDB 32符合连接string时相同的代码工作正常。 另外,请注意,无论要写入的responseExcelFile是.xsl还是.xslx,我都会得到相同的错误。

这不是权限问题,运行服务的帐户完全控制文件名中的目录。 这也不是重复的文件名,因为它是时间戳。

收到的实际错误是:

错误—批量查询导出过程错误:NewBulkQueryProcessor:IErrorInfo.GetDescription失败,E_FAIL(0x80004005)。 在System.Data的System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions选项,DbConnectionPoolKey poolKey,对象poolGroupProviderInfo,DbConnectionPool池,DbConnection拥有对象)在System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr,OleDbConnection连接)。 System.Data.ProviderBase上的System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection,TaskCompletionSource'1重试,DbConnectionOptions userOptions,DbConnectionInternal oldConnection,DbConnectionInternal&连接)上的ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection,DbConnectionPoolGroup poolGroup,DbConnectionOptions userOptions) DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection,DbConnectionFactory connectionFactory,TaskCompletionSource'1 retry,DbConnectionOptions userOptions)System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConn ection outerConnection,DbConnectionFactory connectionFactory)在BulkQuery.BulkQueryOutputFile.CreateExcelSpreadsheet(String responseExcelFile)System.Data.OleDb.OleDbConnection.Open()

任何帮助,将不胜感激。