我在做一个C# windows单机程序。在程序运行的过程中会访问4个Excel。访问Excel过程如下:
创建一个临时文件夹,将4个Excel文件拷贝到里面。
程序会用到临时文件夹中的4个Excel文件。
用完时会用下面的代码结束ExcelworkBook.Close(false,null,null); //不保存Excel文件
app.Workbooks.Close();
app.Quit();if(range != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(range);
range = null;
}
if(range1 != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(range1);
range1 = null;
}
if(range2 != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(range2);
range2 = null;
}
if(textBox != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(textBox);
textBox = null;
}
if(workSheet != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(workSheet);
workSheet = null;
}
if(workBook != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(workBook);
workBook = null;
}
if(app != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
app = null;
}
GC.Collect();
this.KillExcelProcess();其中KillExcelProcess()的代码为:
Process[] myProcesses;
DateTime startTime;
myProcesses = Process.GetProcessesByName("Excel");
//得不到Excel进程ID,暂时只能判断进程启动时间
foreach(Process myProcess in myProcesses)
{
startTime = myProcess.StartTime;
if(startTime > beforeTime && startTime < afterTime)
{
myProcess.Kill();
}
}问题是:
在单击情况下,运行上面的代码不会有问题,可是当用到windows2000的Terminal Server服务(远程桌面调用,就是说会有多个中端同时用这个单机版的程序)时,就会出现问题,问题都和Excel相关。有的中端会运行出错,有的会好。这是为什么呢?