日期:2014-05-18  浏览次数:21034 次

process.kill webform中操作时拒绝访问
又来向大家请教啦。
我的程序是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杀掉


------解决方案--------------------
如果是win7,那你右键以管理员身份运行看看
------解决方案--------------------
权限控制,.net要获得高级权限只有登录运行,kill本来也是危险操作,没解决方案,不然随便谁写个东西计算机就不停重启了。
------解决方案--------------------
当使用Interop 调用word com的时候,要使用 Marshal.ReleaseComObject清理对象。

具体使用,参考下面的讨论:
Proper Interop Cleanup
http://stackoverflow.com/questions/2059250/proper-interop-cleanup
------解决方案--------------------
我有个想法,你可以写个控制台应用程序,把你KILL方法写里边。然后放在你软件目录里,在你需要调用的时候 System.Diagnostics.Process.Start("控制台应用程序的目录"); 试试看行不行