首页 新闻 会员 周边 捐助

Win32Exception (0x80004005): 拒绝访问

0
悬赏园豆:20 [已解决问题] 解决于 2012-06-18 17:09

下面是堆栈:

[Win32Exception (0x80004005): 拒绝访问。]
   System.Diagnostics.Process.GetProcessHandle(Int32 access, Boolean throwIfExited) +1985316
   System.Diagnostics.Process.Kill() +49
   ApricotCMS.Controllers.ImportController.Kill(_Application excel) +144
   ApricotCMS.Controllers.ImportController.Family(HttpPostedFileBase file) +27340
   lambda_method(Closure , ControllerBase , Object[] ) +127
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +264
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +39
   System.Web.Mvc.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12() +129
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +826266
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +314
   System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +825488
   System.Web.Mvc.Controller.ExecuteCore() +159
   System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +335
   System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +62
   System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +20
   System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d() +54
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +469
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +375
下面是代码(IIS7.5+windows server 2008 r2):
 1 System.Diagnostics.Process[] procList = System.Diagnostics.Process.GetProcesses();
 2             IntPtr t = new IntPtr(excel.Hwnd);   //得到这个句柄,具体作用是得到这块内存入口   
 3 
 4             int k = 0;
 5             GetWindowThreadProcessId(t, out k);   //得到本进程唯一标志k  
 6             foreach (System.Diagnostics.Process proc in procList)
 7             {
 8                 if (k == proc.Id)
 9                 {
10                     proc.Kill();
11                 }
12             }

求帮忙。。。到底是什么权限限制了?百度谷歌基本上翻遍了,还没解决!!!这问题弄了两天了!!!到底该怎么解决。。。

如果问题解决了可以追加分数

张世民的主页 张世民 | 初学一级 | 园豆:184
提问于:2012-06-08 12:10
< >
分享
最佳答案
0

并不是每个进程都能够获取到他的Modules集合,而Modules集合的第一个成员就是MainModule属性,所以必须使用try/catch语句块进行异常处理,另外有些进程的StartTime也不能被访问,所以可以这样写:

ProcessModule module = null;
DateTime time = DateTime.Now;
 foreach (System.Diagnostics.Process proc in procList)
     {
                 try
                {
                    module = proc.MainModule;
                    time = proc.StartTime;

                    if (k == proc.Id)
                    {
                           proc.Kill();
                    }
                }
                catch
                { }
     }

另外你这个程序貌似完全没必要遍历所有进程,Process类提供了通过进程id获取进程的方法

如:Process.GetProcessById(k)

收获园豆:5
psforever | 菜鸟二级 |园豆:461 | 2012-06-09 15:30
其他回答(5)
0

看日志是从 HttpApplication.ExecuteStep IIS中调用的,IIS的运行账号一般是Network service,因此不具有杀进程的权限, 你可以使用管理员运行IIS,看看,然后特别处理

收获园豆:5
2012 | 园豆:21645 (高人七级) | 2012-06-08 12:28

IIS是用管理员账户运行的,请问这个特别处理是如何特别处理法呢?

支持(0) 反对(0) 张世民 | 园豆:184 (初学一级) | 2012-06-08 12:38
2

检查一下当前站点的应用程序池所用的帐户是否具有相应的权限。

收获园豆:5
dudu | 园豆:29732 (高人七级) | 2012-06-08 14:14
0

可以参照dudu的意见,将Identity设置为最高权限用户,也可自定义一个用户,如图:

收获园豆:5
笨笨的小蜗牛 | 园豆:177 (初学一级) | 2012-06-11 19:06
0

将Identity设置为最高权限用户 可行 非常感谢

jayfery | 园豆:202 (菜鸟二级) | 2012-07-24 09:18
0

怎样将Identity设置为最高权限用户?能否具体一点,谢谢.

shoupifeng | 园豆:260 (菜鸟二级) | 2015-02-16 12:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册