우선, 프로세스 래퍼를 사용하여 프로세스의 시작 경로를 유지하려고합니다..NET 프로세스 문제 Windows
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를 포함했습니다.
메모장을 닫으려는 경우 내 runningProcesses를 반복하고 메모장의 시작 경로가있는 프로세스를 찾은 다음 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을 얻습니다.
Windows XP에서 제대로 작동하지 않는 Process 클래스에 대해 뭔가 있습니까?
같은 것이 아닙니다보십시오 모든 프로세스
를 제거해야 null 참조로 실행되는 것을 무효화하는 방법을 알아 냈습니다. –
@Ramhound 네, runningProcess [i]가 null이 아닙니다. –
'runProcesses [i]'가 실제로 null임을 의미하는 null expecton을 얻고 있습니다. –