Hola!
El primer ejemplo que armé sacado de consultas de Google (notepad debe estar corriendo):
- using System; 
- using System.Diagnostics; 
- using System.Runtime.InteropServices; 
-   
- namespace test { 
-     internal class Program { 
-   
-         [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] 
-         private static extern int GetWindowThreadProcessId(IntPtr handle, out uint processId); 
-   
-         public static string GetProcessPath(IntPtr hwnd) { 
-             uint pid = 0; 
-             GetWindowThreadProcessId(hwnd, out pid); 
-             Process proc = Process.GetProcessById((int)pid); 
-             return proc.MainModule.FileName.ToString(); 
-         } 
-   
-         static void Main(string[] args) { 
-             Process[] processes = Process.GetProcessesByName("notepad"); 
-   
-             foreach (Process p in processes) { 
-                 IntPtr windowHandle = p.MainWindowHandle; 
-                 Console.WriteLine(GetProcessPath(windowHandle)); 
-             } 
-             Console.ReadKey(); 
-         } 
-     } 
- } 
-   
Algo a tener en cuenta es lo bits de tu ejecutable con los bits del ejecutable que quieres localizar. Si creas el tuyo como x86 y el target es x64, no funcionará. Deberás crear el tuyo como x64 para poder acceder a los de procesos de 64 bits.
Saludos!