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("",typeof(string));dr1 = dt1.NewRow();
dr1["name"]="张浩";
dr1["no"]="10";
dr1[""]="无";
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的进程的。我也不知道什么原因,反正是郁闷的。如果放在服务器上去跑的话,那服务器要崩的,还请高手指导一下,到底我什么地方出了问题,或者环境还需配置什么么?谢谢!
                      

解决方案 »

  1.   

    Process[] myProcess = Process.GetProcessesByName("WORD");
                foreach (Process process in myProcess)
                {
                    try
                    {
                        process.Kill();
                    }
                    catch
                    { }
                }
      

  2.   

    这是微软的一个bug,其实就是com组件的内存泄漏问题,微软有专门的解决方案的。
    System.Runtime.InteropServices.Marshal.ReleaseComObject(wordApp );
      

  3.   


    引用楼上的
    这是微软的一个bug,其实就是com组件的内存泄漏问题,微软有专门的解决方案的。
    System.Runtime.InteropServices.Marshal.ReleaseComObject(wordApp );
      

  4.   

    owc组件对象不能回收的问题,已经碰到过很多次了。这个问题去google或微软的官网上都有的。
      

  5.   

    跟操作系统也有关系的,我们的情况是2003下可以正常回收,xp下就留下很多excel进程。