日期:2014-05-20  浏览次数:20850 次

大难题!谁能解决!C#, 2000远程桌面,Excel
我在做一个C#   windows单机程序。在程序运行的过程中会访问4个Excel。

访问Excel过程如下:
创建一个临时文件夹,将4个Excel文件拷贝到里面。
程序会用到临时文件夹中的4个Excel文件。
用完时会用下面的代码结束Excel

workBook.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相关。有的中端会运行出错,有的会好。

这是为什么呢?

------解决方案--------------------
这个是比较棘手的问题,你可以考虑不关闭Excel。每次都New Excel.ApplicationClass是没有关系的。