2011-02-14 18 views
5

Un poco de búsqueda devuelve este resultado: Which processes are running managed code and which version?¿Cómo puedo determinar si se gestiona un proceso en C#?

Sin embargo, me pregunto si hay una "mejor" manera de simplemente iterar a través de los módulos cargados? Parece un poco extraño buscar la cadena "mscorwks.dll". Leer aunque el Process Class en MSDN no parece indicar una solución obvia.

suposiciones hechas

  1. .NET 4.0
  2. Tengo un "proceso" en la mano

Gracias

+0

Define "código administrado". Java es administrado, los idiomas interpretados también se administran. ¿Le interesan específicamente los ensamblados de .NET o cualquier tipo de código administrado? –

+0

No lo veo como peculiar. Ese es el nombre de archivo de la biblioteca central dll. – Amy

+0

@Ed S. Disculpas, me refiero a "código administrado" código que se ejecuta en la parte superior de la CLR. @yodaj007 ¿Se garantiza que será el mismo en todas las versiones de .NET Framework y para todos los idiomas? – aolszowka

Respuesta

5

Para cualquier futuros empleados de Google: Terminé usando la respuesta sugerida publicado aquí How to check if a program is using .NET?

Process mProcess = //Get Your Process Here 
foreach (ProcessModule pm in mProcess.Modules) 
{ 
    if (pm.ModuleName.StartsWith("mscor", StringComparison.InvariantCultureIgnoreCase)) 
    { 
     return true; 
    } 
} 

En un aparte en busca de "mscorwks (gracias 0xA3!). dll "como se menciona en mi publicación original no funciona para .NET 4.0.

+1

O en una sola expresión LINQ: 'return process.Modules.Cast (). Any (module => module.ModuleName.StartsWith ("mscor", StringComparison.InvariantCultureIgnoreCase)); '. – MasterMastic

1

En el código, obtener la ruta completa del proceso de ejecución. Intente utilizar Assembly.Load en el proceso. Si funciona, es un ensamblado de .NET :)

Cuestiones relacionadas