Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Check if a specific exe file is running

I want to know how i can check a program in a specific location if it is running. For example there are two locations for test.exe in c:\loc1\test.exe and c:\loc2\test.exe. I only wanted to know if c:\loc1\test.exe is running and not all instances of test.exe.

like image 223
murasaki5 Avatar asked Nov 16 '09 15:11

murasaki5


People also ask

How do I know which exe is running?

Press the Ctrl, Shift, and Esc keys together while the program is running to open the Task Manager. After the Task Manager opens, click on More Details if you don't see the Processes tab. Now, locate the program under the Processes tab, right-click it, and then select Open File.

How can I tell if an exe is running or not in C#?

GetFullPath("c:\\loc1\\test.exe"); foreach (Process p in Process. GetProcesses()) { string fileName = Path. GetFullPath(p. MainModule.

How do you check if a application is running?

The best place to start when monitoring apps is the Task Manager. Launch it from the Start menu or with the Ctrl+Shift+Esc keyboard shortcut. You'll land on the Processes screen. At the top of the table, you'll see a list of all the apps which are running on your desktop.

How can I see what is inside an EXE file?

When you open the EXE file in 7-Zip, you'll be shown a list of files and folders that the EXE file contains. You can double-click folders to see the files stored inside. You can select multiple files by holding Ctrl and clicking each one. Click the "Extract" button after selecting the files.


3 Answers

bool isRunning = Process.GetProcessesByName("test")                 .FirstOrDefault(p => p.MainModule.FileName.StartsWith(@"c:\loc1")) != default(Process); 
like image 131
bruno conde Avatar answered Sep 19 '22 13:09

bruno conde


This is my improved function :

private bool ProgramIsRunning(string FullPath) {     string FilePath =  Path.GetDirectoryName(FullPath);     string FileName = Path.GetFileNameWithoutExtension(FullPath).ToLower();     bool isRunning = false;      Process[] pList = Process.GetProcessesByName(FileName);      foreach (Process p in pList) {         if (p.MainModule.FileName.StartsWith(FilePath, StringComparison.InvariantCultureIgnoreCase))         {             isRunning = true;             break;         }     }      return isRunning; } 

and use it as :

ProgramIsRunning(@"c:\loc1\test.exe"); 
like image 44
8Unlimited8 Avatar answered Sep 18 '22 13:09

8Unlimited8


try this... I use it to determine at startup if another process is already running with the same name as the exe I'm trying to start, and then just bring that one to foreground, (and to focus) if it is already running... You could modify it to take a process name and test for that specific name... This will tell you if there is a process running with a certain name, but not where that process was loaded from ...

If there is a process running with the specified name, then if that process had an exposed accessible method that returns where it was loaded from, you could call that method on the running process, otherwise, I don't know..

But just out of curiosity, why do you care, unless they're different? And if they're different in some way, code to use that difference (whatever it is) to detect which is loaded. But if they're the same how can it matter which on-disk image was used to load it?

    [DllImport("user32.dll")]
    private static extern bool SetForegroundWindow(IntPtr hWnd);
    [DllImport("user32.dll")]
    private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
    [DllImport("user32.dll")]
    private static extern bool IsIconic(IntPtr hWnd);

    private const int SW_HIDE = 0;
    private const int SW_SHOWNORMAL = 1;
    private const int SW_SHOWMINIMIZED = 2;
    private const int SW_SHOWMAXIMIZED = 3;
    private const int SW_SHOWNOACTIVATE = 4;
    private const int SW_RESTORE = 9;
    private const int SW_SHOWDEFAULT = 10;

 private static bool IsAlreadyRunning()
    {
        // get all processes by Current Process name
        Process[] processes = 
            Process.GetProcessesByName(
                Process.GetCurrentProcess().ProcessName);

        // if there is more than one process...
        if (processes.Length > 1) 
        {
            // if other process id is OUR process ID...
            // then the other process is at index 1
            // otherwise other process is at index 0
            int n = (processes[0].Id == Process.GetCurrentProcess().Id) ? 1 : 0;

            // get the window handle
            IntPtr hWnd = processes[n].MainWindowHandle;

            // if iconic, we need to restore the window
            if (IsIconic(hWnd)) ShowWindowAsync(hWnd, SW_RESTORE);

            // Bring it to the foreground
            SetForegroundWindow(hWnd);
            return true;
        }
        return false;
    }
like image 26
Charles Bretana Avatar answered Sep 21 '22 13:09

Charles Bretana