Você pode fazer isso usando o WMI.
Precisamos construir uma consulta WQL para processos que são chamados link , e queremos obter o caminho a partir do qual o executável foi lançado.
Essas informações são mantidas na classe Win32_Process e na documentação nos mostra quais bits de informação precisamos fornecer (por exemplo, Nome ), e quais bits pedir (por exemplo, ExecutablePath ).
Podemos usar o wmic.exe para consultar o WMI da seguinte forma:
wmic process WHERE name="httpd.exe" GET ExecutablePath
Isso deve produzir algo semelhante a:
C:\Apps\httpd.exe
C:\Apps\httpd.exe
C:\Apps\beta-test\httpd.exe
Você pode querer obter o CommandLine , em vez do ExecutablePath , pois isso também informará com quais argumentos de linha de comando o processo foi iniciado, e isso pode faz uma grande diferença quando você está restringindo quais processos estão fazendo o que:
wmic process WHERE name="httpd.exe" GET CommandLine
Isso deve mostrar algo como:
C:\Apps\httpd.exe -config=E:\widgetsales\httpd.conf
C:\Apps\httpd.exe -config=E:\widgetservices\httpd.conf
C:\Apps\beta-test\httpd.exe -config=D:\DevStuff\httpd.conf
Podemos fazer ainda melhor, obtendo o PID , bem como a linha de comando:
wmic process WHERE name="httpd.exe" GET CommandLine, ProcessID
CommandLine ProcessId
C:\Apps\httpd.exe -config=E:\widgetsales\httpd.conf 51064
C:\Apps\httpd.exe -config=E:\widgetservices\httpd.conf 24716
C:\Apps\beta-test\httpd.exe -config=D:\DevStuff\httpd.conf 52728