¿Podemos verificar si una aplicación en ejecución o un programa usa .Net Framework para ejecutarse?¿Cómo comprobar si un programa está utilizando .NET?
Respuesta
Hay un truco que una vez aprendí de Scott Hanselman's list of interview questions. Usted puede enumerar fácilmente todos los programas que se ejecutan en .NET símbolo del sistema mediante:
tasklist /m "mscor*"
aparecerá una lista de todos los procesos que tienen mscor*
entre sus módulos cargados.
podemos aplicar el mismo método en el código:
public static bool IsDotNetProcess(this Process process)
{
var modules = process.Modules.Cast<ProcessModule>().Where(
m => m.ModuleName.StartsWith("mscor", StringComparison.InvariantCultureIgnoreCase));
return modules.Any();
}
Tenga en cuenta que esto deja fuera posibles procesos Mono. – Dykam
@Dykam ¿El tiempo de ejecución de mono no es también llamado mscorlib.dll? –
El tiempo de ejecución es simplemente 'mono'. O 'mono.exe' en Windows. .Net usa PE para permitir que el sistema operativo use mscorlib.dll para iniciar la aplicación, pero mono no hace tal truco. Y el verdadero core lib se llama corlib.dll, creo, ya que no es corlib de MS. – Dykam
Utilice la función System.Reflection.Assembly.LoadFrom
para cargar el archivo .exe. Esta función lanzará una excepción si intenta cargar un archivo binario que no es un ensamblado de .NET.
-1: preguntó acerca de una aplicación en ejecución –
¿qué diferencia hace? ¿la aplicación en ejecución no tiene el archivo .exe? –
En ese caso, muéstrele cómo encontrar el archivo EXE correspondiente al programa en ejecución; y mostrarle cómo lidiar con la posibilidad de que su proceso no tenga acceso de lectura al archivo .EXE. –
programación se obtendría el nombre de la imagen a partir usando API de Win32 como NtQueryInformationProcess
, o en uso .Net System.Diagnostics.Process.GetProcesses()
y leer Process.StartInfo.FileName
.
Entonces abierta y decodificar los encabezados de PE de que la imagen utilizando los datos prescritos en el artículo de MSDN a continuación:
http://msdn.microsoft.com/en-us/magazine/cc301808.aspx
Advertencias: sólo detectará .NET construidas conjuntos por ejemplo no detectará Win32 EXEs que aloja dinámicamente CLR usando las API de CorHost.
Uso CLR COM interfaces de ICorPublish y ICorPublishProcess. La forma más sencilla de hacer esto desde C# es pedir prestado algo de código de depuración de SharpDevelop, y hacer lo siguiente:
ICorPublish publish = new ICorPublish();
ICorPublishProcess process;
process = publish.GetProcess(PidToCheck);
if (process == null || !process.IsManaged)
{
// Not managed.
}
else
{
// Managed.
}
Me preguntaba, si hace esto desde C#, ¿en qué condiciones este informe de verificación "no se administrará"? – stakx
Parece que solo considerará administrar aquellos procesos que tienen el mismo CLR utilizado - https://social.msdn.microsoft.com/Forums/en-US/fac08eee-001d-4566-b1e7-fda1ddbc37e7/icorpublishgetprocess-throws- systemargumentexception-value-does-not-fall-within-the-expected? forum = netfxtoolsdev. Entonces uno debe tener cuidado con eso. –
sugiero bajarse DotNetReflector del Redgate y comprobar si puede abrir la aplicación.
Sé que esto es aproximadamente un millón de años demasiado tarde, pero en caso de que ayude, mi método favorito para averiguar si un exe está usando .net es ejecutar el desensamblador MSIL contra él que viene con .NET SDK. Si tiene un .NET exe, obtendrá un buen desglose gráfico de su contenido; si es un simple y viejo win32 exe, recibirás un mensaje indicándote lo mismo.
Buena respuesta. Específicamente, ejecute ILDASM.EXE, que se instala automáticamente con Visual Studio. Consulte: http://msdn.microsoft.com/en-us/library/f7dy01k1(v=vs.110).aspx Para iniciar ILDASM desde Win8/VS2013: Inicio -> Herramientas de Visual Studio -> Símbolo del sistema de desarrollador para VS2013 . Desde Win8/VS2012: Inicio -> Comando de desarrollador -> Símbolo del sistema de desarrollador para VS2012. Desde Win7: Todos los programas -> Microsoft Visual Studio -> Herramientas de Visual Studio -> Símbolo del sistema de Visual Studio. –
- 1. Cómo comprobar si un archivo está completamente copiado en .NET
- 2. Cómo comprobar si .Net Framework está instalado [C#/WPF]
- 3. ¿Cómo comprobar rápidamente si la carpeta está vacía (.NET)?
- 4. ¿Cómo comprobar si un hilo está durmiendo?
- 5. C# comprobar si un directorio está oculto?
- 6. ¿Cómo comprobar si un archivo está comprimido gzip?
- 7. Comprobar desde .NET si Windows Update está habilitado
- 8. mi programa .net está causando un BSOD
- 9. ssh: comprobar si un túnel está vivo
- 10. Cómo comprobar si $ _GET [ 'id'] está establecido y no está vacío utilizando php
- 11. ¿Cómo comprobar si UITextFields está vacío?
- 12. Cómo comprobar si un NSPoint está dentro de un NSRect
- 13. ¿Cómo comprobar si un parámetro contiene dos subcadenas utilizando Mockito?
- 14. ¿Cómo comprobar si PHP mail() está habilitado?
- 15. ¿Cómo comprobar si Suhosin está instalado?
- 16. ¿Cómo comprobar si está correctamente instalado mongodb
- 17. ¿Cómo comprobar si javascript está deshabilitado?
- 18. ¿Cómo comprobar si un archivo zip generado está dañado?
- 19. ¿Cómo comprobar si bluetooth está habilitado programáticamente?
- 20. cómo comprobar si boost :: deadline_timer está activo
- 21. ¿Cómo comprobar si una clase está inicializada?
- 22. ¿Cómo comprobar si $ _GET está vacío?
- 23. Comprobar si un punto está en un rectángulo girado (C#)
- 24. ¿Cómo comprobar si un archivo está vacío en Bash?
- 25. ¿Cómo comprobar si un espejo CRAN está desactualizado?
- 26. Cómo comprobar si se está ejecutando un Thread de Android
- 27. ¿Cómo comprobar si un valor está vacío en Lua?
- 28. ¿Cómo comprobar si un NSProgressIndicator está actualmente animado?
- 29. jQuery: ¿Cómo comprobar si el ratón está sobre un elemento
- 30. ¿Cómo comprobar si un carácter está en mayúscula en Python?
Crank up Process Monitor y si el ejecutable está resaltado en amarillo, es una aplicación administrada. Hurr. – Will
Will, creo que se refería a Process Explorer;) –