Вот надежное решение, которое работает как с 32-битными , так и 64-битными приложениями.
Добавьте следующие ссылки:
с использованием System.Diagnostics;
с использованием System.Management;
Добавьте этот метод в свой проект:
public static string GetProcessPath(int processId)
{
string MethodResult = "";
try
{
string Query = "SELECT ExecutablePath FROM Win32_Process WHERE ProcessId = " + processId;
using (ManagementObjectSearcher mos = new ManagementObjectSearcher(Query))
{
using (ManagementObjectCollection moc = mos.Get())
{
string ExecutablePath = (from mo in moc.Cast<ManagementObject>() select mo["ExecutablePath"]).First().ToString();
MethodResult = ExecutablePath;
}
}
}
catch //(Exception ex)
{
//ex.HandleException();
}
return MethodResult;
}
Теперь используйте его так:
int RootProcessId = Process.GetCurrentProcess().Id;
GetProcessPath(RootProcessId);
Обратите внимание, что если вы знаете идентификатор процесса, то этот метод вернет соответствующий ExecutePath.
Extra, для заинтересованных:
Process.GetProcesses()
... даст вам массив всех запущенных в данный момент процессов, и ...
Process.GetCurrentProcess()
... выдаст вам текущий процесс вместе с их информацией, например, Id и т. д., а такжеограниченный контроль, например, убийство и т. д. *