以下は、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);
プロセスのIDがわかっている場合、このメソッドは対応するExecutePathを返すことに注意してください。
興味のある方のために:
Process.GetProcesses()
...現在実行中のすべてのプロセスの配列が表示されます...
Process.GetCurrentProcess()
...現在のプロセスとその情報(IDなど)や制限された制御(Killなど)が表示されます*