首先,我正在使用自己的进程包装器来保存进程的起始路径。
现在,我有一个名为runningProcesses的
例如:
public class MCProcess()
{
public Process Process { get; set;}
public string StartingPath { get; set;}
public MCProcess(string start, Process p)
{
Process = p;
StartingPath = start;
}
}
现在,我有一个名为runningProcesses的
List<MCProcces>
用于跟踪程序启动的所有进程及其启动路径。例如:
string path = "C:\\Windows\\System32\\notepad.exe";
Process temp = Process.Start(path);
runningProcesses.Add(new MCProcess(path, temp));
有时候,我想关闭我运行的进程。不想通过任务管理器查找我启动的每个进程的MainModuleName,我在其中包含了StartingPath。
如果我想关闭记事本,我只需要循环遍历我的runningProcesses,找出具有notepad startingPath的进程,然后使用Process.Kill来结束该进程。
string path = "C:\\Windows\\System32\\notepad.exe";
for (int i = 0; i < runningProcesses.Count; i++)
{
if (runningProcesses[i].StartingPath == path)
{
runningProcesses[i].Process.Kill();
runningProcesses.RemoveAt(i);
}
}
这段代码在Windows 7上运行良好,没有任何问题。然而,在Windows XP上使用时,会出现一个包含Process.Kill的ArgumentNullException(参数空异常)。
是否有关于Process类的问题导致其在Windows XP上无法正常工作?
runningProcesses[i]
实际上不是 null,并且已经想出了如何避免空引用的问题? - Security HoundrunningProcesses[i]
实际上是 null。 - Security HoundrunningProcesses[i].StartingPath
不抛出ArgumentNullException
时,runningProcesses[i]
怎么会是 null 呢? - Justin