gpt4 book ai didi

c# - Windows XP 的 .NET 进程问题

转载 作者:行者123 更新时间:2023-11-30 12:31:30 24 4
gpt4 key购买 nike

首先,我使用自己的流程包装器来保存流程的起始路径。

public class MCProcess()
{
public Process Process { get; set;}
public string StartingPath { get; set;}

public MCProcess(string start, Process p)
{
Process = p;
StartingPath = start;
}
}

现在,我有一个 List<MCProcces>称为 runningProcesses,我用它来跟踪我的程序已启动的所有进程和每个进程的启动路径。

例如:

string path = "C:\\Windows\\System32\\notepad.exe";
Process temp = Process.Start(path);
runningProcesses.Add(new MCProcess(path, temp));

现在,有时我想关闭已运行的进程。我没有查看任务管理器并试图找到我启动的每个进程的 MainModuleName,而是出于某种原因包含了 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 上正常工作?

最佳答案

很惊讶这在 win 7 中是如何工作的。您正在修改一个集合,同时在循环中使用它。您应该维护要删除的进程的索引,然后在完成循环后,删除所有进程

尝试类似的东西

var processesToRemove = runningProcesses.Where (p => String.Equals(p.StartingPath, path);
foreach(var process in processToRemove)
{
process.Process.Kill();
runningProcesses.Remove(process);
}

关于c# - Windows XP 的 .NET 进程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13370777/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com