2016-07-26 229 views
0

我已经创建了一个(Web应用程序)Web调度器来在global.asax文件中每5分钟调用一次方法。它正在成功触发。文件正在被另一个进程使用C#visual studio

在该方法中,我使用interop dll创建excel,并将其另存为操作。 首先,我检查文件夹中是否存在文件,如果存在,我将删除它并执行“另存为”操作。它第一次工作正常。对于存在文件的第二次调用,我无法删除它。它说文件正在被另一个进程使用。

一旦调试器停止并再次运行,我可以删除文件,也只能在第一次运行。

我觉得visual studio(Asp.net开发服务器)正在锁定文件。一旦开发服务器停止,我可以删除它。

请找到下面的代码: -

string fullFileName = Path.Combine(Path.GetTempPath(), testf); 
 
FileInfo TheFileInfo = new FileInfo(filePath); 
 

 
if (TheFileInfo.Exists) 
 
{ 
 
    File.Delete(fullFileName); 
 
} 
 
    
 
xlWorkBook.SaveAs(fullFileName, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue,misValue); 
 
//xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass(); 
 
GC.Collect(); 
 
GC.WaitForPendingFinalizers(); 
 
xlWorkBook.Close(true, misValue, misValue); 
 
xlApp.Quit(); 
 
xlApp.Application.Quit(); 
 

 
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(chartRange); 
 
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlWorkSheet); 
 
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlWorkBook); 
 
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlApp);

请帮助解决这个问题。

+0

[请勿将Office Interop与ASP.NET一起使用](https://support.microsoft.com/zh-cn/kb/257757)。你会搞砸的,速度会很慢,而且通常会有更好的方式去实现它。 – mason

回答

0

您必须创建对象才能访问excel文件。请严格关闭该对象。如果该对象没有处理,那么你会得到这个错误。 Excel对象很重。

0

由于Office可能会展示,Microsoft目前不推荐并不支持来自任何无人参与的非交互式客户端应用程序或组件(包括ASP,ASP.NET,DCOM和NT服务)的Microsoft Office应用程序自动化Office在此环境中运行时不稳定的行为和/或死锁。

如果您正在构建一个在服务器端上下文中运行的解决方案,则应该尝试使用对于无人执行安全的组件。或者,您应该尝试找到允许至少部分代码运行客户端的替代方案。如果您从服务器端解决方案使用Office应用程序,则该应用程序将缺少成功运行所需的许多必要功能。此外,您将面临整体解决方案稳定性的风险。请阅读Considerations for server-side Automation of Office文章中的更多内容。

您可以考虑使用Open XML SDK,请参阅Welcome to the Open XML SDK 2.5 for Office了解更多信息。或为服务器端执行而设计的任何其他第三方组件。

相关问题