Estoy desarrollando aplicaciones de consola en .Net y quiero cambiar un comportamiento un poco en función de la información de que la aplicación se inició desde cmd.exe o desde explorer.exe. ¿Es posible?¿Es posible determinar qué proceso inicia mi aplicación .Net?
Respuesta
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;
El CreateToolhelp32Snapshot Function tiene un método Process32First que le permitirá leer un PROCESSENTRY32 Structure. La estructura tiene una propiedad que les permite conocer la información que desea:
th32ParentProcessID - El identificador del proceso que ha creado este proceso (proceso padre).
Este artículo le ayudará a comenzar a utilizar la función ToolHelpSnapshot:
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;
}
- 1. Cómo determinar el uso de memoria en mi aplicación .NET
- 2. ¿Cómo puedo determinar por qué mi proceso termina?
- 3. ¿Qué sucede cuando se inicia una aplicación .net?
- 4. ¿Es posible descompilar toda la aplicación .NET?
- 5. ¿Es posible determinar en qué idioma se escribió un ensamblado .NET ex post facto?
- 6. ¿Qué es un dominio de aplicación .NET?
- 7. ¿Qué es un dominio de aplicación .NET?
- 8. ¿Es posible eliminar mi aplicación de la aplicación de configuración?
- 9. Monit no inicia el proceso
- 10. ¿Cómo puedo determinar por qué mi aplicación ASP.NET está reciclando?
- 11. ¿Por qué mi aplicación .Net contacta con Verisign?
- 12. ¿Es posible habilitar depuración para un proceso de Java después de que se inicia sin depuración
- 13. ¿Es posible desactivar C++ assert desde la aplicación .net
- 14. ¿Cómo puedo determinar cuánta memoria está usando mi programa .NET?
- 15. ¿Es posible UAC elevar un proceso sin iniciar otro proceso?
- 16. ¿Cómo puedo obtener el PID del proceso principal de mi aplicación?
- 17. Buscar todos los procesos secundarios de mi propio proceso .NET/averiguar si un proceso determinado es hijo propio.
- 18. Usando tinyurl.com en una aplicación .Net ... ¿es posible?
- 19. ¿Por qué mi aplicación .net requiere plena confianza?
- 20. ¿Por qué el acceso directo creado por mi instalación de MSI inicia el proceso de configuración cada vez?
- 21. ¿Cómo puedo determinar programáticamente qué aplicación está bloqueando un archivo?
- 22. Determinar desde el código de qué usuario mi proceso se está ejecutando como
- 23. .Net - ¿Qué es un "desenrollar"?
- 24. ¿Por qué mi aplicación WPF es lenta en ciertos sistemas?
- 25. ¿Qué es un proceso ininterrumpible?
- 26. this == null método de instancia .NET - ¿por qué es posible?
- 27. ¿Por qué no es posible definir indexadores genéricos en .NET?
- 28. ¿Cómo puedo saber en Linux qué proceso envió mi proceso una señal
- 29. ¿Cómo determinar qué es CFTypeRef?
- 30. Diseño multiproceso de Chrome/IE8, ¿es posible en .NET?
Please check Adam Mitz comment bellow. Todavía encontré esta respuesta mejor debido a la simplicidad. Sin embargo, alguien debería preocuparse. –