2016-07-26 109 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瞭解更多信息。或爲服務器端執行而設計的任何其他第三方組件。

相關問題