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() ...
随机推荐
- 还在用 KPI 管研发团队?用 OKR 倍儿爽!
近几年,经常能听到不少技术管理者在倡导:用 OKR 来管理及打造一个高执行力的研发团队. 据我了解,OKR 最成功的落地公司是在 Google --一家有着非常浓厚工程师文化的公司,后来陆续在 Fac ...
- Linux的各个发行版本(一)
三大流派 1.Slackware SUSE Linux Enterprise Server (SLES) OpenSuse桌面 2.debian 迄今为止最遵循GNU规范的Linux系统 Ubuntu ...
- Linux安装配置Nginx服务器
如有需要可以加我Q群[308742428]大家一起讨论技术,有偿服务. 后面会不定时为大家更新文章,敬请期待. 喜欢的朋友可以关注下. 前言 今天搭建nginx服务器,来访问静态资源文件. Nginx ...
- JS window对象 Navigator对象 Navigator 对象包含有关浏览器的信息,通常用于检测浏览器与操作系统的版本。
Navigator对象 Navigator 对象包含有关浏览器的信息,通常用于检测浏览器与操作系统的版本. 对象属性: 查看浏览器的名称和版本,代码如下: <script type=" ...
- Vim: Overwrite read-only file without quiting vim
当你忘记以sudo命令使用vim编辑一个只读文件时,可以执行以下vim命令强制覆写该文件: :w !sudo tee % > /dev/null 命令太长,可在vimrc文件中做命令映射(映射为 ...
- Java工程师面试linux操作选择面试题大全
1.请写出常用的linux指令不低于10个,请写出linux tomcat启动.linux指令arch 显示机器的处理器架构(1)uname -m 显示机器的处理器架构(2)shutdown -h n ...
- linux中的read_link
readlink是linux系统中一个常用工具,主要用来找出符号链接所指向的位置. readlink 获取当前进程对应proc/self/exe]:shell中 readlink /proc/sel ...
- Linux系统关闭对ping命令做响应。
1.测试 ping 192.168.10.5 可以正常ping通, 2,修改 /proc/sys/net/ipv4/icmp_echo_ignore_all 文件的值=1 3.在测试 已经ping不 ...
- 9、Python 连接 PostgreSQL数据库 -- psycopg2
1.cmd pip install psycopg2 -- 提示错误信息 2.pip show pip -->查看当前pip版本 3.python -m pip install --upg ...
- redis集群添加新节点
一.创建节点(接上文) 1.在H1服务器/root/soft目录下创建7002目录 2.将7001目录的配置文件redis.conf拷贝到7002,并修改配置文件的端口 3.进入 redis-5.0. ...