我写了一些代码来监视正在运行的Windows进程。 我想知道某个过程何时开始以及何时结束。代码就像我想要的那样工作。不断监视进程
现在,我希望在windows窗体服务器应用程序中实现它 - 只要表单处于活动状态,它就会在循环中运行。我想我应该使它可以异步运行,可能使用BackgroundWorker
。我只是不确定什么是最好的做法和方式。
这里是我的显示器代码:
using System;
using System.Management;
using System.Diagnostics;
using System.Collections.Generic;
using System.ComponentModel;
class ProcessMonitor
{
public static void Main()
{
Dictionary<string, Process> newProcs= new Dictionary<string, Process>();
while (true)
{
foreach (Process process in Process.GetProcesses())
{
if (process.ProcessName.CompareTo("Someprocess") == 0)
{
if (!searchForProcess(newProcs, process.Id))
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT CommandLine FROM Win32_Process WHERE ProcessId = " + process.Id);
foreach (ManagementObject @object in searcher.Get())
{
Console.Write("Adding new Process: ");
Console.WriteLine(@object["CommandLine"] + " ");
newProcs.Add(@object["CommandLine"] + " ", process);
}
}
}
}
checkProcesses(newProcs);
}
Console.WriteLine("Done");
}
private static bool searchForProcess(Dictionary<string, Process> newProcs, int newKey)
{
foreach (Process process in newProcs.Values)
{
if (process.Id == newKey)
return true;
}
return false;
}
private static void checkProcesses(Dictionary<string, Process> newProcs)
{
foreach (string currProc in newProcs.Keys)
{
bool processExists = false;
foreach (Process process in Process.GetProcesses())
{
if (process.Id == newProcs[currProc].Id)
{
processExists = true;
break;
}
}
if (!processExists)
{
Console.Write("Process Finished: ");
Console.WriteLine(currProc);
newProcs.Remove(currProc);
if (newProcs.Count == 0)
break;
}
}
}
}
任何想法?
你是什么意思与“Windows窗体应用程序服务器”? –
您可以使用计时器。你有任何规范应该如何工作? – Jocke
我的服务器端是一个Windows窗体应用程序,而不是控制台应用程序。基本上,我的客户端向服务器发送命令请求,服务器运行它们。我希望跟踪这些命令,并在每个命令完成时向客户端发送通知。 – Idanis