2008-09-10 14 views

Respuesta

9
Process this_process = Process.GetCurrentProcess(); 
int parent_pid = 0; 
using (ManagementObject MgmtObj = new ManagementObject("win32_process.handle='" + this_process.Id.ToString() + "'")) 
{ 
    MgmtObj.Get(); 
    parent_pid = Convert.ToInt32(MgmtObj["ParentProcessId"]); 
} 
string parent_process_name = Process.GetProcessById(parent_pid).ProcessName; 
+0

Please check Adam Mitz comment bellow. Todavía encontré esta respuesta mejor debido a la simplicidad. Sin embargo, alguien debería preocuparse. –

3

Un problema con el ToolHelp/ManagementObject se acerca es que el proceso padre ya podría haber salido.

La función GetStartupInfo Win32 (use PInvoke si no hay equivalente en .NET) rellena una estructura que incluye el título de la ventana. Para una aplicación de consola Win32 "app.exe", esta cadena de título es "app" cuando se inicia desde cmd y "c: \ full \ path \ to \ app.exe" cuando se inicia desde el explorador (o el depurador VS).

Por supuesto, este es un truco (sujeto a cambios en otras versiones, etc.).

#define WIN32_LEAN_AND_MEAN 
#include <windows.h> 
int main() 
{ 
    STARTUPINFO si; 
    GetStartupInfo(&si); 
    MessageBox(NULL, si.lpTitle, NULL, MB_OK); 
    return 0; 
} 
Cuestiones relacionadas