又来向大家请教啦。
我的程序是webform的,然后需要在后台生成word文档后让用户下载。但是现在发现有两个winword.exe进程一直杀不掉,呵呵,其实总共有三个,一个就能杀掉,另外两个就完全不行了。
后来就想说 用process.kill来解决,具体如下。
代码:
DateTime startTime = System.DateTime.Now;//记录Word进程打开的时间
...
//操作完成杀死Work进程
System.Diagnostics.Process[] processes;
processes = System.Diagnostics.Process.GetProcessesByName("WINWORD");
foreach(System.Diagnostics.Process process in processes)
{
  if(startTime < process.StartTime)
  process.Kill();
}  
但是,当我用非管理员用户登录电脑,运行程序时就报错,说是拒绝访问。
另外我在web.config中已经定义了
<identity impersonate="true" userName="Administrator" password="Password1"/>
能有什么解决方法吗?? 最好不管用何种身份登录电脑,程序都能将winword杀掉

解决方案 »

  1.   

    你还是写成下面这样试试吧for(int i=processes.Length-1;i>=0;i--)
    {
      if(startTime < processes[i].StartTime)
      processes[i].Kill();
    }
      

  2.   


    改了,还是拒绝访问。由于我现在不是以管理员的身份登录的电脑,但是我的web.config中定义的是管理员,是否这样才导致无法杀掉进程呢??
      

  3.   

    本帖最后由 bdmh 于 2012-08-02 13:50:18 编辑
      

  4.   

    %>_<% 我的还是xp呢  而且是webform的 我是调式的时候发现的 
      

  5.   

    权限控制,.net要获得高级权限只有登录运行,kill本来也是危险操作,没解决方案,不然随便谁写个东西计算机就不停重启了。
      

  6.   

    当使用Interop 调用word com的时候,要使用 Marshal.ReleaseComObject清理对象。具体使用,参考下面的讨论:
    Proper Interop Cleanup
    http://stackoverflow.com/questions/2059250/proper-interop-cleanup
      

  7.   

    当使用Interop 调用word com的时候,要使用 Marshal.ReleaseComObject清理对象。具体使用,参考下面的讨论:
    Proper Interop Cleanup
    http://stackoverflow.com/questions/2059250/proper-interop-cleanup
      

  8.   

    我有个想法,你可以写个控制台应用程序,把你KILL方法写里边。然后放在你软件目录里,在你需要调用的时候 System.Diagnostics.Process.Start("控制台应用程序的目录"); 试试看行不行