How can I get a path of a running process by name? For example, I know there is a process named "notepad" running, and I want to get the path of it. How to get the path without looping through all other processes?
Not this way!
using System.Diagnostics;
foreach (Process PPath in Process.GetProcesses())
{
if (PPath.ProcessName.ToString() == "notepad")
{
string fullpath = PPath.MainModule.FileName;
Console.WriteLine(fullpath);
}
}
Try something like this method, which uses the GetProcessesByName
method:
public string GetProcessPath(string name)
{
Process[] processes = Process.GetProcessesByName(name);
if (processes.Length > 0)
{
return processes[0].MainModule.FileName;
}
else
{
return string.Empty;
}
}
Keep in mind though, that multiple processes can have the same name, so you still might need to do some digging. I'm just always returning the first one's path here.
There is a method GetProcessesByName that existed in .Net 2.0:
foreach (Process PPath in Process.GetProcessesByName("notepad"))
{
string fullpath = PPath.MainModule.FileName;
Console.WriteLine(fullpath);
}
There are really two approaches you can take.
You can do process by name:
Process result = Process.GetProcessesByName( "Notepad.exe" ).FirstOrDefault( );
or you could do what you do but use linq
Process element = ( from p in Process.GetProcesses()
where p.ProcessName == "Notepad.exe"
select p ).FirstOrDefault( );