Вот надежное решение, которое работает с 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.
Дополнительно, для заинтересованных:
Process.GetProcesses()
... предоставит вам массив всех запущенных в данный момент процессов и ...
Process.GetCurrentProcess()
... даст вам текущий процесс, вместе с их информацией, например, Идентификатор и т. Д., А также ограниченный контроль, например, Убить и т. Д. *