各位大佬,有沒有在asp.net website c#殺掉過生成的excel進程
Excel.ApplicationClass m_objExcel = new Excel.ApplicationClass();
m_objExcel.Visible = false;
IntPtr t = new IntPtr(m_objExcel.Hwnd);
int k = 0;
GetWindowThreadProcessId(t,out k);
System.Diagnostics.Process P = System.Diagnostics.Process.GetProcessById(k); Excel.Workbooks m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
Excel.Workbook m_objBook = (Excel.Workbook)(m_objBooks.Add(true));
Excel.Worksheet m_objSheet = (Excel.Worksheet)m_objBook.ActiveSheet;
P.kill()
試過N多方法之後,網上找了這一種,只是IntPtr t = new IntPtr(m_objExcel.Hwnd)提示m_objExcel不包含Hwnd定義,困擾好久了,望高人幫忙解決

解决方案 »

  1.   

    // m_objExcel.Visible = false;
    // IntPtr t = new IntPtr(m_objExcel.Hwnd);
    // int k = 0;
    // GetWindowThreadProcessId(t,out k);
    // System.Diagnostics.Process P = System.Diagnostics.Process.GetProcessById(k); Excel.Workbooks m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
    Excel.Workbook m_objBook = (Excel.Workbook)(m_objBooks.Add(true));
    Excel.Worksheet m_objSheet = (Excel.Worksheet)m_objBook.ActiveSheet;
    System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objSheet);
    m_objSheet = null;
    System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objBook);
    m_objBook.Close(false,null,null);
    m_objBook = null;
    System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objExcel);
    m_objExcel = null;
    m_objExcel.Quit();
    // GC.Collect();// m_objBook.Close(false,null,null);
    // m_objExcel.Quit();
    // System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objExcel);
    // m_objExcel = null;// P.Kill();哪種組合是正確的
      

  2.   

                Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();            IntPtr t = new IntPtr(app.Hwnd);
                int id = 0;
                GetWindowThreadProcessId(t, out id);
                System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(id);
    //............
                app.Quit();
                p.Kill();
      

  3.   

    using System.Runtime.InteropServices;
            [DllImport("User32.dll", CharSet = CharSet.Auto)]
            private static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);
    还要加这两个东西.
      

  4.   

        public static void KillProcess(string processName)
            {
                System.Diagnostics.Process myproc = new System.Diagnostics.Process();
                //得到所有打开的进程  
                try
                {
                    foreach (Process thisproc in Process.GetProcessesByName(processName))
                    {
                        if (!thisproc.CloseMainWindow())
                        {
                            if(thisproc!=null)
                            thisproc.Kill();
                        }
                    }
                }
                catch (Exception Exc)
                {
                    throw Exc;
                    // msg.Text+=   "杀死"   +   processName   +   "失败!";  
                }
            }   调用方法:KillProcess("Excel");
      

  5.   

    <!--<identity  impersonate="true"   userName="crmadmin"   password="Pa$$w0rd"/>-->
    取消此处注释,改为登录服务器的机器名和密码;config文件添加你杀死进程的权限.
      

  6.   

    发表于:2008-09-01 13:17:05 5楼 得分:0 
                Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();             IntPtr t = new IntPtr(app.Hwnd); 
                int id = 0; 
                GetWindowThreadProcessId(t, out id); 
                System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(id); 
    //............ 
                app.Quit(); 
                p.Kill(); 
     我用的是
    Excel.ApplicationClass m_objExcel = new Excel.ApplicationClass(); 
    m_objExcel.Visible = false; 
    //IntPtr t = new IntPtr(m_objExcel.Hwnd); 
    現在此處IntPtr t = new IntPtr(m_objExcel.Hwnd); 提示m_objExcel沒有Hwnd的屬性
      

  7.   

     Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application(); 
    這個命名空間是什麼DLL檔來的?
      

  8.   

    com -> microsoft excel 11.0 object library
      

  9.   

    发表于:2008-09-01 14:08:0911楼 得分:0 
    com -> microsoft excel 11.0 object library 謝謝老兄我沒有11.0,只有9.0 上引入dll之後,沒有Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application(); 只能這樣定義Excel.Application m_objExcel=new Excel.ApplicationClass();就是前面的Microsoft.Office帶不出來,我現在是在web下面導出Excel,不是在winform下面導出,還請老兄多多指教
      

  10.   

    Excel.ApplicationClass m_objExcel = new Excel.ApplicationClass();
    m_objExcel.Visible = false;
    IntPtr t = new IntPtr(m_objExcel.Hwnd);
    int id = 0;
    GetWindowThreadProcessId(t,out id);
    System.Diagnostics.Process P = System.Diagnostics.Process.GetProcessById(id);為什麼我得到的ID總是等於0啊?
      

  11.   

    为什么不正常释放对象
    然后调用GC?
    在FINLLY里释放对象调用GC就是了。
      

  12.   

    或者System.Diagnostics.Process[] P = System.Diagnostics.Process.GetProcessesByName("Excel");
                if (P.Length > 0)
                {
                    foreach (System.Diagnostics.Process p in P)
                    {
                        p.Kill();
                    }
                } 关掉所有EXCEL
      

  13.   

    Excel.ApplicationClass m_objExcel = new Excel.ApplicationClass(); 
    m_objExcel.Visible = false; 
    IntPtr t = new IntPtr(m_objExcel.Hwnd); 
    int id = 0; 
    GetWindowThreadProcessId(t,out id); 
    System.Diagnostics.Process P = System.Diagnostics.Process.GetProcessById(id); 
    經過測試,這個ID在website(asp.net 2003 c#)下是得不到的,但是在Winfrom中才能得到,結貼