c# - 如何在 Windows 中使用 C# 检测进程开始和结束?

标签 c# windows c#-4.0 process

我有很好的 C# 工作经验,但现在我想开发一个简单的(可能是控制台应用程序)软件,它只检测我计算机上进程开始或结束的名称和时间。

例如(我假设我的小应用程序已经在运行)如果用户打开 Firefox,那么它应该随时间将 firefox.exe 插入到数据库中,如果用户关闭它,它也会做同样的事情。

和上面一样,如果用户打开记​​事本,那么它应该插入带有时间的 notepad.exe 等等。

我知道如何在数据库中插入值,但我只需要您帮助我确定进程/程序何时在我的系统上开始或结束。

老实说我以前从未开发过这种应用程序,所以我不知道可以使用控制台应用程序还是我需要制作一个 Windows 服务应用程序等。

因此,考虑到我是初学者,请提供您的答案。

在C#的部分我能够理解它所以需要担心。

我正在使用带有 .net 4.0 的 visual studio 2010。

最佳答案

要在不进行轮询的情况下执行此操作,需要 WMI。这在 .net 中得到很好的支持,您可以使用 ManagementEventWatcher订阅 WMI 通知的类。

Code Project article说明了它是如何完成的。这是一个显示它是多么简单的摘录。

notePad = new ProcessInfo("notepad.exe");
notePad.Started +=
    new Win32Process.ProcessInfo.StartedEventHandler(this.NotepadStarted);
notePad.Terminated +=
    new Win32Process.ProcessInfo.TerminatedEventHandler(this.NotepadTerminated);

请注意,ProcessInfo 是该文章所附代码中实现的一个类。

关于c# - 如何在 Windows 中使用 C# 检测进程开始和结束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8455873/

相关文章:

wcf - 将旧 WCF 服务与新 WCF 服务相结合

.net - 在运行时修改 Entity Framework 模型

c# - 在 Silverlight/WPF 中绑定(bind)复杂属性

c# - 如何在 Excel 共享插件中使用对话框

c# - 使用 Microsoft Fake Framework MVC4 对 WebMatrix.WebData 进行单元测试

c++ - GetSystemInfo 是否为您提供虚拟 CPU 的总数(即超线程)?

c# - Visual Studio 生成后事件返回错误 MSB3073

windows - 如何打开postgres命令行?

更改 GtkText 输入法

C# - 何时在高事件服务器中使用标准线程、ThreadPool 和 TPL