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)即可,执行效果:
C#获取系统服务+进程+启动时间的更多相关文章
- 老李推荐:第5章5节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 获取系统服务引用
老李推荐:第5章5节<MonkeyRunner源码剖析>Monkey原理分析-启动运行: 获取系统服务引用 上一节我们描述了monkey的命令处理入口函数run是如何调用optionP ...
- C# Process获取当前进程信息
1.获取当前进程信息整理 Process.GetCurrentProcess(),返回当前程序的进程对象. Process cur = Process.GetCurrentProcess(); //当 ...
- windows下使用C#获取特定进程网络流量
最近老板接了一个中船重工的项目,需要做一个有关海军软件系统的组件评估项目,项目中有一个子项目需要获取特定进程的各种系统参数,项目使用.NET平台.在获取特定进程各种系统参数时,其它诸如进程ID,进程名 ...
- 获取其他进程中ListBox和ComboBox的内容
(*// 标题:获取其他进程中ListBox和ComboBox的内容 说明:Window2000+Delphi6调试通过 设计:Zswang 支持:wjhu111@21cn.com 日期:2004-0 ...
- VB VS2003获取当前进程用户登录
Page.User.Identity.Name获取当前进程用户名称,VS03才可以用
- Windows获取其他进程中Edit控件的内容
最近做的MFC项目中,有个获取其他进程中Edit控件内容的需求,本来以为是个很简单的问题,但是来来回回折腾了不少时间,发博记录一下. 刚开始拿到这个问题,很自然的就想到GetDlgItemText() ...
- Delphi获取其它进程窗口句柄的3种方法
本文主要跟大家介绍Delphi中获取其它进程的窗口句柄,在Delphi中获取其它进程的窗口句柄,绝大部分人首先想到的会使用:FindWindow或者用GetWindow来遍历查找,如: handle ...
- 获取当前进程(程序)主窗体句柄并设置wpf的父窗体为此句柄
有时候在c++调用wpf控件的时候,wpf控件想自己显示窗体,但需要设置owner属性.迂回解决办法是设置wpf的window窗体的父窗体为进程的句柄. 1.获取当前进程id int id = Pro ...
- 扫描系统进程和获取某进程的PID
扫描系统的所有进程 #include <stdio.h> #include <windows.h> #include <tlhelp32.h> int scan() ...
随机推荐
- Linux执行Java文件
最近学习shell脚本,写个简单java类让linux去执行 java类没别的东西,就引了一个fastjson的jar,写了个main方法 序列化一个User对象 打印 package com.lws ...
- @RequestParam 引发的编译问题
在使用SpringMVC绑定基本类型(如String,Integer等)参数时,应通过@RequestParam注解指定具体的参数名称,否则,当源代码在非debug模式下编译后,运行时会引发Handl ...
- jmeter 响应超时时间设置 压力增大,不能正常退出全部线程
当压力增大会出现connect timeout error 压力增大,不能正常退出全部线程: 解决办法:http request default--advance--timeouts 如填写1,表示大 ...
- ABTest介绍及abtest流量切换实现
本文为学习abtest切流方案方便以后查看大部分内容转载自原文 https://blog.csdn.net/tanweii163/article/details/80543083 互联网公司的业务发展 ...
- 数据持久化之Android文件系统(一)
阿里P7Android高级架构进阶视频免费学习请点击:https://space.bilibili.com/474380680 一.前言 文件系统一直是Android开发过程中经常接触的东西.而关于内 ...
- 数据结构与算法简记--redis有序集合实现-跳跃表
跳表 定义 为一个值有序的链表建立多级索引,比如每2个节点提取一个节点到上一级,我们把抽出来的那一级叫做索引或索引层.如下图所示,其中down表示down指针,指向下一级节点.以此类推,对于节点数为n ...
- Hibernate4教程六(2):基本实现原理
整体流程 1:通过configuration来读cfg.xml文件 2:得到SessionFactory 工厂 3:通过SessionFactory 工厂来创建Session实例 4:通过Sessio ...
- 关于JDK,tomcat,eclipse的配置
1.下载安装JDK 在自定义安装路径时,jdk和之后的jre文件夹是属于平行结构,我的安装路径为:D:\jdk\jdk1.6.0_43和D:\jdk\jre6 然后是对环境变量的配置, 计算机→属性→ ...
- redis底层相关命令(一)
说明 用于分析redis底层数据结构以及内存情况 底层数据结构分析 1.查看key键的对象类型type key 本地:>sadd test1 本地:>type test1 set 2.查看 ...
- 查看github热门项目
访问 Trending 或者可以通过菜单 Explore -> 选择 "Trending" -- 默认是查看今天在github社区活跃的仓库 在 github 搜索框输入 s ...