请问:c#打开word后如何知道该word进程的PID?---------------------------------
打开word的操作是抛到线程实现的,
也就是同一时间可能有几个word.exe进程存在,因此只能用进程pid去杀。

解决方案 »

  1.   

      试试这样行不?
      通过 Process newp = Process.Start (openFileDialog1.FileName );开启word后
           string []  processInfo={
                             newp.newp.ProcessName , //进程名字
                                 newp.Id.ToString() //进程号
                               };
    在结束word的方法中这样写:
             //获取计算机中的进程
                Process[] processes;
               processes = System.Diagnostics.Process.GetProcesses();            for (int i = 0; i < processes.Length; i++)
                {                Process process = processes[i];
                    string processname = process.ProcessName.ToString();
                    if(processname="word.exe")
                       {
                              processes[i].kill();
                        }
                   }  
      

  2.   

    没这么简单啊,
    我是通过api操作word时引发的进程里word.exe未背销毁就是在word打开的瞬间如何取到进程pid
    部分代码如下:
    Microsoft.Office.Interop.Word.Application newApp = new Microsoft.Office.Interop.Word.Application();
            Microsoft.Office.Interop.Word.Document doc = null;
    ...
    ....
      // 打开doc文件 
                doc = newApp.Documents.Open(ref Source, ref Unknown, ref readOnly,
                    ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown,
                    ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown);            // 转换格式 
                doc.SaveAs(ref Target, ref format,
                    ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown,
                    ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown);..
    .. finally
            {
                if (doc != null)
                {
                    // 关闭文档和Word程序 
                    doc.Close(ref Unknown, ref Unknown, ref Unknown);
                }
                newApp.Quit(ref Unknown, ref Unknown, ref Unknown);            //逐步关闭所有
                System.Runtime.InteropServices.Marshal.ReleaseComObject(doc);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(newApp);
    }
      

  3.   

    我自己测试时 如果不单开word 运行程序 可以自动销毁如果打开一个word 然后再运行此程序时,
    计算机会响一声 然后那个进程也不会关闭,就是有两个word.exe进程。
    如果再运行一次此程序会有三个word.exe进程  。。
      

  4.   

    System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
    System.Runtime.InteropServices.Marshal.ReleaseComObject(Doc);
    app=null;
    Doc=null;
    GC.Collect();
    GC.Collect();
    System.Diagnostics.Process myproc= new System.Diagnostics.Process();
    foreach (Process thisproc in Process.GetProcessesByName(processName)) {
    if(!thisproc.CloseMainWindow()){
    thisproc.Kill();
    }}
      

  5.   

    你可以先检测有word进程运行没有,有的话,在原进程下运行新文档怎么样?
    那样只要关一个word进程了。
      

  6.   

    http://www.cnblogs.com/deepnight/archive/2010/01/27/Query_Parent_Process.html
    Process.GetProcessesByName(processName)
    获取所有word进程,然后判断这些进程的父进程ID是不是你自已的程序,不是不需要kill