需求:很多时候我们需要后台运行几个Console来不停的计算数据,那么部署到客户服务器后,如果出现突发异常,程序挂掉了,那。。。?

解决方案:封装了一个对后台运行程序不停监测的功能,如果发现程序有异常,但是进程还在,这个时候就Kill掉这个进程,重启后台计算程序,这里的计算程序均为"控制台运行程序"。

代码如下:

   if (进程是否挂掉)
{
// 获取所有进程
Process[] ps = Process.GetProcesses();
for (int i = ; i < ps.Length; i++)
{
if (ps[i].ProcessName.StartsWith(“ProcessName"))
{
// 统计崩溃计数
CrashCount(obj.Name);
ps[i].Kill();
}
}
Process.Start(Path);
Console.WriteLine(ProcessName + "程序已重启!");
}

调试:

System.ComponentModel.Win32Exception: 异常中可以看到,Kill()进程的时候出现"拒绝访问",在网上搜了下,解决方案大致就这几种:

  1. 在config里增加identity

    • <system.web>
        <identity impersonate="true" userName="Administrator" password="123456" />
      </system.web> 
  2. 检测程序用"管理员身份运行"
  3. 对监测的程序目录分配权限

结果是这几种方式都没能解决此问题。

我查看了Kill()方法的注释:

 //
// 摘要:
// 立即停止关联的进程。
//
// 异常:
// System.ComponentModel.Win32Exception:
// 未能终止关联的进程。 - 或 - 正在终止该进程。 - 或 - 关联的进程是一个 Win16 可执行文件。
//
// System.NotSupportedException:
// 您正尝试为远程计算机上运行的进程调用 System.Diagnostics.Process.Kill()。 该方法仅对在本地计算机上运行的进程可用。
//
// System.InvalidOperationException:
// 该进程已经退出。 - 或 - 没有与此 System.Diagnostics.Process 对象关联的进程。
public void Kill();

发现是一个Win32Exception的异常,随后我又查阅了ms的官方文档,果然有发现:

大概意思就是说如果这个监测程序是Console,這样写是没问题的,可以正常结束掉进程。但这里因为需要在界面上展现出一些监测数据,这里我用的是WPF,也就是文档里说的图像界面程序。

MS的原话是这样的:如果调用 Kill,则可能丢失进程编辑的数据或分配给进程的资源。Kill 导致进程不正常终止,因而只应在必要时使用。CloseMainWindow 使进程能够有序终止并关闭所有窗口,所以对于有界面的应用程序,使用它更好。如果 CloseMainWindow 失败,则可以使用 Kill终止进程。Kill 是终止没有图形化界面的进程的唯一方法。

将Kill方法()改成了CloseMainWindow()即可正常杀掉进程。

以上就是这两天碰到的一个异常,让我总结出了一个新的结论,在遇到问题的时候,不要盲目的去google或百度,应该首先去查阅ms的官方文档。

C# Process.Kill() 拒绝访问(Access Denied) 的解决方案的更多相关文章

  1. 关于IPC和PTH用户权限问题,psexec拒绝访问(Access Denied)的原因

    前瞻 关于net use和psexec无法使用本地管理员组用户建立连接的问题 测试环境: win7系统,存在域环境 域名:de1ay 普通域用户: de1ay\de1ay 域管理员用户:de1ay\A ...

  2. linux+nginx+phpfpm 访问出现Access denied错误解决方案

    linux上安装nginx,php-fpm后访问页面一直出现Access denied错误. 网上搜原因大概如下图: 我试了第一个方案,然后就好了.

  3. 对于出现拒绝访问root用户的解决方案

    提示:ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'   由于使用mysql -u root ...

  4. 关于mysql的access denied 错误解决方案

    mysql -u root -p 按回车,输入密码后提示access denied......ues password YES/NO的错误? 第一步: 这时你需要进入/etc/mysql目录下,然后s ...

  5. ASP.NET MVC 4.0中选择Windows 验证默认出错拒绝访问的原因和解决方案

    在VS 2012或者2013 中,根据模板创建一个ASP.NET MVC 4.0的应用程序,选择下面的模板 然后选择Intranet Application 不对源代码做任何修改,直接按下F5调试,会 ...

  6. JAVA编译中拒绝访问的问题及解决方案

    在java编译时出现,可以将C盘内的文件转移到其他盘,此问题可能是权限不足不能够读取C盘文件造成的. 文件名与类名要一致,包括大小写,也是要一致!

  7. 【转载】在MySQL登录时出现Access denied for user 'root'@'localhost' (using password: YES) 拒绝访问,并可修改MySQL密码

    在MySQL登录时出现Access denied for user 'root'@'localhost' (using password: YES) 拒绝访问,并可修改MySQL密码 2018年08月 ...

  8. mysql登录报错:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

    在MySQL登录时出现Access denied for user 'root'@'localhost' (using password: YES) 拒绝访问 对于出现拒绝访问root用户的解决方案错 ...

  9. git clone: HTTP Basic: Access denied 错误

    git clone 报 HTTP Basic: Access denied 错误 解决方案: 1. 如果账号密码有变动 用这个命令 git config –-system –-unset creden ...

随机推荐

  1. php入门引言

    php开发者要具备的一些要求: [1]html常用标签的基础知识 [2]html+css布局的基础知识 [3]了解php开发环境 [4]了解php标签和扩展名 1.php标签是撒??? <?ph ...

  2. Spark Tungsten揭秘 Day3 内存分配和管理内幕

    Spark Tungsten揭秘 Day3 内存分配和管理内幕 恭喜Spark2.0发布,今天会看一下2.0的源码. 今天会讲下Tungsten内存分配和管理的内幕.Tungsten想要工作,要有数据 ...

  3. 《C和指针》 读书笔记 -- 第11章 动态内存分配

    1.C函数库提供了两个函数,malloc和free,分别用于执行动态内存分配和释放,这些函数维护一个可用内存池. void *malloc(size_t size);//返回指向分配的内存块起始位置的 ...

  4. .NET基础之深度复制和浅度复制

    之前一直没有搞清楚深度复制和浅度复制的区别到底在哪里,今天彻底把这个东西弄懂了,写出来与到家共勉. 如果大家不懂值类型和引用类型的区别,请先看http://www.cnblogs.com/Autumo ...

  5. 十六、mysql 分区之 简单sql优化2

    .索引的分类 B-Tree 基本支持 HASH 只有memory支持 R-Tree myisam支持 Full-text myisam支持(全文索引) .Memory引擎下只有“=”条件才会使用索引 ...

  6. (转)PHP中的 抽象类(abstract class)和 接口(interface)

    转自:http://blog.csdn.net/sunlylorn/article/details/6124319 一. 抽象类abstract class 1 .抽象类是指在 class 前加了 a ...

  7. Datatables中文API——回调函数

    fnCookieCallback:还没有使用过 $(document).ready(function () { $('#example').dataTable({ "fnCookieCall ...

  8. sed 常见用法

    sed 1. 移除空白行 sed '/^$/d' file 2. 直接在文本中进行替换 sed 's/pattern/replacement/g' -i file -i[SUFFIX], --in-p ...

  9. TIANKENG’s restaurant

    Problem B:http://codeforces.com/contest/616/problem/B B. Dinner with Emma 题意:一对夫妻要去餐厅吃晚饭,Emma 想去最豪华( ...

  10. adobe 蛋疼的套装, 想安装一个Flash Professional CS6,标准版还没有...

    产品比较 查看内容 查看各 Creative Suite 6 版本的组件. Design Standard Design & Web Premium Production Premium Ma ...