2011-08-14 11 views
5

CLR çalışma zamanı (CLR çalışma zamanı konak yeri) ev sahipliği yapmaktadır. NET bu süreç içinde yürütülebilir. /Sonra, bir yerli süreç içindeki CLR Runtime başlatmak başka yük benim .NET DLL arama bazı kodları kullanıyorum

şöyle Ben yansıma kullanıyorum diğer NET yürütülebilir yüklemek için:

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

Şimdi, çalışma zamanını başlatan bir C++ dll enjekte o zaman Meclis kullandığı .NET dll çağırır. Belleğe başka bir .NET yürütülebilir dosyasını yüklemek ve yürütmek için yükleyin.

dll arayarak, benim .NET yürütülebilir yükler kez

:

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

hatta

Process.GetCurrentProcess().MainModule.FileName; 

Bu, elbette, hatta başka içeride onun koşma olsa yürütülebilir kendisinin konumunu döndürür ev sahibi işlem. Bu ev sahibi işlemin adını ele geçirmenin bir yolu var mı? Ben o kısmı düzgün çalıştığını biliyorum böylece Süreç kaşif konak işlem içinde çalışan olarak gösterir. Ben o zaman doğru işlem adını gösterecek ilk yüklendi NET DLL içinde bu komutları çalıştırmak olsaydı Tabii

.

Teşekkürler.

DÜZENLEME: Ben de GetEntryAssembly() ve GetCallingAssembly() çalıştılar

.

cevap

4

OLDUĞUNU YAPMAYIN.

Sen senin olmayan herhangi sürecine NET framework enjekte olmayabilir. Daha önce yüklenmiş olan veya daha sonra farklı bir çerçeve sürümünü yüklemek için farklı bir çerçeveye sahip olabilir.

GetModuleFileName (GetModuleHandle (NULL)) öğesini arayarak ana bilgisayar işleminin adını alabilirsiniz; (Her iki API çağrıları P/çağırır vardır. [1] ve [2]).

+0

Üzgünüz Per Lundberg, ancak StackOverflow erişilebilirlik hatalarını düzeltmeyeceği için size düzenleme yapamıyorum. – Joshua

0

Sorunuzu doğru bir şekilde anladığım halde, "ana işlem" i bulmak istiyorsanız ... Bunun nasıl yapılacağına ilişkin güzel kod örnekleri için yönetilen veya P/Invoke yoluyla bunu yapmanın farklı yolları vardır. bkz. How to get parent process in .NET in managed way

İlgili konular