C# 在IIS中托管asp.net网站时清理Com组件

C# 在IIS中托管asp.net网站时清理Com组件,c#,asp.net,excel,iis,C#,Asp.net,Excel,Iis,我有一个在IIS托管的网站。 我的应用程序是关于在Excel文档中写入和读取数据的 从VS运行应用程序时,始终只能看到一个EXCEL.exe 但当我在IIS中托管同一个应用程序时,每次编写都会创建一个excel对象并显示在任务管理器中,因此有时我的网站会停止响应 下面是我的代码 try { xlApp = new app.Application(); xlWorkBooks = xlApp.Workb

我有一个在IIS托管的网站。 我的应用程序是关于在Excel文档中写入和读取数据的

从VS运行应用程序时,始终只能看到一个EXCEL.exe 但当我在IIS中托管同一个应用程序时,每次编写都会创建一个excel对象并显示在任务管理器中,因此有时我的网站会停止响应

下面是我的代码

    try
            {
                xlApp = new app.Application();
                xlWorkBooks = xlApp.Workbooks;          
                xlWorkBook = xlWorkBooks.Open(FilePath, missing, false, missing, missing, missing, true, missing, missing, true, missing, missing, missing, missing, missing);   
                xlWorkSheet = xlWorkBook.Worksheets.get_Item(index);
//code …………………………….
                xlApp.DisplayAlerts = false;
                xlWorkBook.Save();
                boolWriteSuccess = true;
                xlApp.DisplayAlerts = true;
            }
Catch()
{
}            
            finally
            {
                GC.Collect();
                GC.WaitForPendingFinalizers();
                Marshal.FinalReleaseComObject(xlWorkSheet);
                Marshal.FinalReleaseComObject(xlWorkSheets);
                xlWorkBook.Close(Type.Missing, Type.Missing, Type.Missing);
                Marshal.FinalReleaseComObject(xlWorkBook);
                xlWorkBooks.Close();
                Marshal.FinalReleaseComObject(xlWorkBooks);
                if (xlApp != null)
                    xlApp.Quit();
                Marshal.FinalReleaseComObject(xlApp);
            }
以下是网站托管在IIS中时任务管理器的屏幕截图

我总是想从任务管理器中清除excel.exe,但有些我无法清除。
请在这方面帮助我。

保存excel后,应关闭工作簿。每次创建nea app.application时,它都会创建新的excel.exe 保存excel后,请使用下面的代码

    try {
foreach (Process proc in Process.GetProcessesByName("Excel"))
        {
            proc.Kill();
        }}catch(Exception ex){
MessageBox.Show(ex.Message);}

从ASP.NET或其他服务器技术使用Office互操作是一个可怕的想法。这些API是为在桌面应用程序中使用而编写的,用于自动化Office(一套桌面应用程序)。服务器应用程序在许多方面都不同,因此在其中使用Office互操作是一个非常非常糟糕的主意。它也不受Microsoft支持,可能会违反您的Office许可证。是的,我开始打开XML,谢谢你的建议。首先,
ex.Message
没有足够的信息进行故障排除。使用
例如ToString()
。更重要的是,在显示消息后,代码将执行什么操作-1用于忽略异常。好的,先生。我只是试图帮助关闭excel对象。他已经放置了试抓块,所以我认为他不需要使用我的试抓。很抱歉,下次我会注意的谢谢您的回答,但当多个用户尝试在excel上执行写/读操作时,它将不起作用,因为excel进程将被终止。是的,保存excel后关闭工作簿。然后销毁该对象。否则,您可以识别您的excel进程,然后终止您启动的进程以及我们向客户显示的此异常消息。。最好只显示ex.message并将ex.tostring()记录在审计文件中。