Asp.net向word插入数据,始终有一winword.exe这个进程杀不了!
private void Button1_Click(object sender, System.EventArgs e)
{
DataTable dt1 = new DataTable();
DataRow dr1 ;
dt1.Columns.Add( "name ",typeof(string));
dt1.Columns.Add( "no ",typeof(string));
dt1.Columns.Add( "mark ",typeof(string));
dr1 = dt1.NewRow();
dr1[ "name "]= "张浩 ";
dr1[ "no "]= "10 ";
dr1[ "mark "]= "无 ";
dt1.Rows.Add(dr1);
Word.ApplicationClass wordApp = null;
try
{
wordApp = new Word.ApplicationClass();
//定义一个模板的名称
object tempName = Server.MapPath( ". ")+ "\\22.doc ";
...代码省略
try
{代码省略...}
fially
{
if(MyDoc != null)
{
// 关闭,释放
MyDoc.Close(ref missing, ref missing, ref missing);
MyDoc = null;
}
}
}
finally
{
// 关闭,释放
if(wordApp != null)
{
wordApp.Quit(ref missing, ref missing, ref missing);
wordApp = null;
}
}
}
以上是我程序的大致代码,当我开始单步执行的时候,执行第一个try中的 wordApp = new Word.ApplicationClass();的时候,就不执行object tempName = Server.MapPath( ". ")+ "\\22.doc ";这行,就直接跳到最后一个finally去执行了,当发现执行不了的时候,又跳到Word.ApplicationClass wordApp = null;这里开始执行,这个时候,就能一步一步的执行下去了,直到最后把新的.doc的文件产生。这个时候,我打开任务管理器,发现有个winword.exe的进程没有结束掉。但是,我把这个程序发给别的同事调试是一点问题没有,没有出现有winword.exe的进程的。我也不知道什么原因,反正是郁闷的。如果放在服务器上去跑的话,那服务器要崩的,还请高手指导一下,到底我什么地方出了问题,或者环境还需配置什么么?谢谢!
------解决方案--------------------Process[] myProcess = Process.GetProcessesByName( "WORD ");
foreach (Process process in myProcess)
{
try
{
process.Kill();
}
catch
{ }
}
------解决方案--------------------这是微软的一个bug,其实就是com组件的内存泄漏问题,微软有专门的解决方案的。
System.Runtime.InteropServices.Marshal.ReleaseComObject(wordApp );
------解决方案--------------------owc组件对象不能回收的问题,已经碰到过很多次了。这个问题去google或微软的官网上都有的。
------解决方案--------------------跟操作系统也有关系的,我们的情况是2003下可以正常回收,xp下就留下很多excel进程。