User6996
User6996

Reputation: 3003

Getting a path of a running process by name

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);
    }
}

Upvotes: 8

Views: 31494

Answers (3)

SASS_Shooter
SASS_Shooter

Reputation: 2216

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( );

Upvotes: 3

FishBasketGordo
FishBasketGordo

Reputation: 23142

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.

Upvotes: 11

Austin Salonen
Austin Salonen

Reputation: 50225

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);
}

Upvotes: 4

Related Questions