2011-08-14 17 views
5

Estoy usando algún código para iniciar CLR Runtime dentro de un proceso nativo, luego llamo a mi .NET DLL para cargar otro. NET ejecutable dentro de ese proceso.Agarrando el id/nombre del proceso que ejecutó mi ensamblado administrado/hosts CLR runtime (CLR runtime host location)

Para cargar otro ejecutable .NET estoy usando la reflexión, así:

Assembly.Load(file).EntryPoint.Invoke(null, null); 

Ahora, me inyecto una DLL de C++ que inicia el tiempo de ejecución, a continuación, llama a la DLL de .NET que utiliza Asamblea. Cargue para cargar otro ejecutable de .NET en la memoria y ejecútelo.

Una vez que el DLL se carga mi ejecutable .NET, llamando al:

System.Reflection.Assembly.GetExecutingAssembly().Location; 

o incluso

Process.GetCurrentProcess().MainModule.FileName; 

Esto, por supuesto, devuelve la ubicación del propio ejecutable, a pesar de que su funcionamiento dentro de otro proceso de host. ¿Hay alguna manera de que pueda tomar el nombre de ese proceso de host? Process Explorer lo muestra como ejecutando dentro del proceso de host, así que sé que tengo esa parte funcionando correctamente.

Por supuesto, si tuviera que ejecutar estos comandos dentro de la DLL .NET que se cargó primero, entonces mostraría el nombre del proceso adecuado.

Gracias.

EDIT:

He tratado GetEntryAssembly() y GetCallingAssembly() también.

Respuesta

4

NO HAGA ESO.

No puede inyectar .NET Framework en ningún proceso que no sea el suyo. Puede tener un marco diferente ya cargado o desear cargar una versión de marco diferente más tarde.

Puede obtener el nombre del proceso de host llamando a GetModuleFileName (GetModuleHandle (NULL)); (Ambas llamadas de API son P/Invoke. [1] y [2]).

+0

Lo siento por Lundberg, pero no puedo acreditarle la edición ya que StackOverflow no solucionará sus errores de accesibilidad. – Joshua

0

Si entiendo bien su pregunta, entonces usted quiere encontrar el "proceso primario" ... Hay diferentes maneras de hacerlo, ya sea administrados oa través de P/Invoke ... para disfrutar de preciosos ejemplos de código sobre la manera de hacer esto ver How to get parent process in .NET in managed way

Cuestiones relacionadas