原文:C#获取系统服务+进程+启动时间

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_38208401/article/details/77592653

1、起因

起因:我们wpf程序进程wisptis.exe(在系统和输入设备之间通信)先于系统服务TabletInputService(加载支持触控手写功能)启动,导致系统文件列表无法滑动

方案:开机启动后,收集系统服务和进程和各自的启动时间

2、服务

1)services.msc查看服务,并无启动时间,找了很久,发现windows系统日志存在服务的启动时间记录(清空日志,重启计算机即可)



2)开始代码获取服务+启动时间:(需要引用系统程序集:System.ServiceProcess)

string[] logTypes = new string[] { "System" };//"Application"应用程序, "Security"安全, "System"系统
foreach (string t in logTypes)
{
EventLog eSystem = new EventLog();
eSystem.Log = t;
string systeminfo = "";
foreach (EventLogEntry log in eSystem.Entries)
{
if (log.Message.Contains("服务处于 正在运行 状态") && log.ReplacementStrings.Any())//由于获取的并不全是服务,所以加个包含的判断
{
systeminfo = systeminfo + "\r\n" + log.ReplacementStrings.First() + "-----" + log.TimeGenerated + "\r\n";//Message其实是ReplacementStrings两个值拼接的,这里我只要服务所以只取了第一个
}
txt_systeminfo.Text = systeminfo;
}
}

执行效果:

3、进程

1)msinfo32查看进程



2)获取进程和启动时间

Process[] myProcesses;
myProcesses = Process.GetProcesses();
string processinfo = "";
foreach (Process p in myProcesses)
{
processinfo = processinfo + "\r\n" + p.ProcessName + "-----" + p.StartTime + "\r\n";
}
txt_processinfo.Text = processinfo;

直接获取进程的开始时间,一直Win32Exception异常拒绝访问



原因是权限不够,找了段也没太明白的代码解决了此问题(需要引用系统程序集:System.Management)

private DateTime GetProcessStartTimeById(int processId)
{
String queryString = "select CreationDate from Win32_Process where ProcessId='" + processId + "'";
SelectQuery query = new SelectQuery(queryString); ManagementScope scope = new ManagementScope(@"\\.\root\CIMV2");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
ManagementObjectCollection processes = searcher.Get(); DateTime startTime = DateTime.Now;
foreach (var process in processes)
{
startTime = ManagementDateTimeConverter.ToDateTime(process["CreationDate"].ToString());
break;
}
return startTime;
}

将p.StartTime替换成GetProcessStartTimeById(p.Id)即可,执行效果:

最新文章

  1. Android语录
  2. 巴特沃斯(Butterworth)滤波器 (2) - 双线性变换
  3. android 之 ListView 里面嵌套 GridView 遇到的问题及其解决方法。
  4. fir.im Weekly - 94 个 iOS 开发资源推荐
  5. Unity3d 脚本基础 思维导图
  6. Android开发之Menu和actionBar
  7. 用Python组合Celery Redis RabbitMQ进行分布式数据抓取
  8. MYSQL在线注释文档--- 在gdb中显示源码(gdbtui使用方法)----赖明星的个人博客
  9. AppDelegate解析
  10. php利用pdo进行mysql的事务处理机制
  11. Cocos2d-x 地图行走的实现3:A*算法
  12. 二维 ST POJ 2019
  13. J2EE走向成功路-02-Struts2 配置(Maven)
  14. 第五章:Python基础の生成器、迭代器、序列化和虚拟环境的应用
  15. 配置trunk
  16. DNS缓存服务器与转发服务器
  17. AI - 参考消息(References)
  18. 《一头扎进SpringMvc视频教程》
  19. 转-CSRF&OWASP CSRFGuard
  20. python-中缀表达式转前缀表达式

热门文章

  1. JavaScript 学习笔记(初学者)
  2. docker使用entrypoint执行时报permission denied错误
  3. Mysql 生成随机数字
  4. Java技术专区-虚拟机系列-堆快照(获取)
  5. 我的.eslintrc.js
  6. 微信小程序的加载机制和运行机制
  7. Docker部署web环境之Lanmt
  8. 取消SVN感叹号即去除版本库
  9. C之输入输出函数(2) -- gets()
  10. React笔记03——React实现TodoList