打开OLEDB连接到Excel文件时Windows服务挂起

当打开一个Excel文件的OLEDB连接时,我有一个Windows服务挂起,如下所示:

using (var connection = new OleDbConnection( "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName + ";Extended Properties=\"Excel 8.0\"")) { connection.Open(); // start using the connection } 

作为控制台应用程序运行时,此代码正常工作。 当我用Visual StudiodebuggingWindows服务时,我可以进入代码,直到我打到connection.Open()的调用。 此时,线程挂起。 没有例外被抛出。 Visual Studio保持响应,直到我点击“全部中断”或“停止debugging”button。 在这一点上,Visual Studio也挂起。 当我杀死进程时,Visual Studio再次变得响应。

有谁知道为什么发生这种情况,如何解决?

编辑:fileName是一个绝对path; 该文件是由服务本身写的。

在Windows服务中尝试执行此操作失败后,我将业务逻辑提取到单独的控制台应用程序中,并从Windows服务中调用该应用程序。 似乎工作正常。

我不知道为什么会发生这种情况,但是您是否试图通过打开文件并将其加载到字节数组中来尝试缩小它 – 以确定问题是否与文件系统/许可权等相关OLE DB? 如果你可以打开和加载文件到一个字节数组中,但是OLE DB仍然挂起,是否挂钩了CPU,这表明可能有关于OLE DB无法处理的文件的东西?

如果你不能得到这个与OLE DB一起工作,你有没有考虑像SpreadsheetGear for .NET第三方xls / xlsx库? 你可以在这里看到现场的样品,并在这里下载免费试用。

免责声明:我自己的SpreadsheetGear LLC