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

解决方案:封装了一个对后台运行程序不停监测的功能,如果发现程序有异常,但是进程还在,这个时候就Kill掉这个进程,重启后台计算程序,这里的计算程序均为"控制台运行程序"。
代码如下:
if (进程是否挂掉)
{
// 获取所有进程
Process[] ps = Process.GetProcesses();
for (int i = 0; i < ps.Length; i++)
{
if (ps[i].ProcessName.StartsWith(“ProcessName"))
{
// 统计崩溃计数
CrashCount(obj.Name);
ps[i].Kill();
}
}
Process.Start(Path);
Console.WriteLine(ProcessName + "程序已重启!");
}
异常中可以看到,Kill()进程的时候出现"拒绝访问",在网上搜了下,解决方案大致就这几种:
在config里增加identity
<system.web>
<identity impersonate="true" userName="Administrator" password="123456" />
</system.web> 
检测程序用"管理员身份运行"
对监测的程序目录分配权限
结果是这几种方式都没能解决此问题。
我查看了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的官方文档。

转载于:https://www.cnblogs.com/Maculish/p/5032417.html

(转载)C# Process.Kill() 拒绝访问(Access Denied) 的解决方案相关推荐

  1. C# Process.Kill() 拒绝访问(Access Denied) 的解决方案

    C# Process.Kill() 拒绝访问(Access Denied) 的解决方案 参考文章: (1)C# Process.Kill() 拒绝访问(Access Denied) 的解决方案 (2) ...

  2. 转载:解决 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passw

    转载: 解决 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 问题 最近新装好的 ...

  3. 当爬虫被拒绝时(Access Denied)

    由于要准备测试数据,不得不大量爬取某个网站的内容.为了防止被封,特意将爬虫设计为单线程同步的爬虫.结果在爬了大约3万个页面的时候,对方发回Access Denied.等一段时间后再启动爬虫,结果还是A ...

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

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

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

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

  6. mysql显示错误Access_关于mysql的access denied 错误解决方案

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

  7. [SharePoint]如何防止从代码跳到“拒绝访问”页面

    在代码中执行没有权限的操作时,SharePoint平台会抛出"拒绝访问(access denied)"异常,并将用户重定向到_layouts/AccessDenied.aspx页面 ...

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

    MYSQL解决密码键入错误 适用于windows安装MySQL 对于出现拒绝访问root用户的解决方案 错误1045(28000):用户'root'@'localhost'(使用密码:YES)拒绝访问 ...

  9. Windows~~~在MySQL登录时出现Access denied for user ‘root‘@‘localhost‘ (using password: YES) ,并修改MySQL密码

    目录 适用于windows安装MySQL 对于出现拒绝访问root用户的解决方案 解决方案: 重启MySQL服务器. 以上仍然不行的话 1.卸载计算机上所有与MYSQL相关应用程序 2.删除MYSQL ...

最新文章

  1. Vcastr 2.2 flv 网络播放器 参数设置
  2. 最新组合式模型量化方法,实现FPGA最高硬件利用率,准确率-推理速度达到SOTA...
  3. 浮点类型和布尔类型(Java)
  4. delphi 调用php接口_新浪图床 API 接口调用与请求方法详细教程
  5. WebService开发中SoapException的用法
  6. IOS – OpenGL ES 调节图像色彩替换 GPUImageFalseColorFilter
  7. [置顶] Android之Handler用法总结
  8. java 相关最新技术_你必须掌握的 21 个 Java 核心技术!
  9. C++单例模式--线程安全
  10. 停车场系统管理数据库设计说明书
  11. 计算机打不开硬盘,硬盘打不开的原因和解决方法
  12. Excel数据分析从入门到精通(九)28个图表之KPI分析
  13. 图像处理gamma修正(伽马γ校正)的原理和实现算法
  14. Vue-DataV 数据可视化工具
  15. 特斯拉如何恢复出厂设置_iphone如何恢复手机出厂设置
  16. 数字0~9的手写识别
  17. mnist手写数字模型训练、保存、加载及图片预测
  18. WebRTC Simulcast测试--用Janus
  19. SpringBoot+log4j2.xml读取application.yml属性值
  20. 什么是入耳式监听器,谁应该使用它们?

热门文章

  1. 在一切都是虚的世界里,你能做的是什么?
  2. 【笔记】《C#高效编程改进C#代码的50个行之有效的办法》第1章C#语言习惯(1)--属性的特性以及索引器(SamWang)...
  3. 移动一个网站集所使用的内容数据库
  4. shell 判断执行结果 是否要推出
  5. 蓝桥杯 ALGO-102 算法训练 数对
  6. [Java] 蓝桥杯ALGO-146 算法训练 4-2找公倍数
  7. python如何存储numpy数组_python – 如何将numpy数组作为对象存储在pandas数据框中?...
  8. adam优化_立即尝鲜!碾压Adam,最好的AI优化器RAdam来了
  9. Linux 中 Iptables 规则定义
  10. Java中什么时候使用extends,什么时候使用implements?