2011-08-14 8 views
5

私はネイティブプロセス内でCLRランタイムを開始するためにいくつかのコードを使用しています。そのプロセス内でNET実行可能ファイル。 私のマネージドアセンブリ/ホストCLRランタイム(CLRランタイムホストの場所)を実行したプロセスID /名前を取得

がそうのように、私は、リフレクションを使用している他の.NET実行可能ファイルをロードするには:

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

は今、私はランタイムを起動するC++のdllを注入し、それがその後、アセンブリを使用する.NET DLLを呼び出します。ロードして別の.NET実行可能ファイルをメモリにロードして実行します。

のdllを呼び出して、私の.NET実行可能ファイルをロードしたら

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

あるいは

Process.GetCurrentProcess().MainModule.FileName; 

これは、当然のことながら、でも、別の内部ランニングかかわらず、実行ファイル自体の位置を返します。ホストプロセス。そのホストプロセスの名前を取得する方法はありますか?プロセスエクスプローラはホストプロセス内で実行していることを示しているため、正しく動作することがわかります。

もちろん、最初にロードされた.NET DLL内でこれらのコマンドを実行すると、適切なプロセス名が表示されます。

ありがとうございました。

編集:私もGetEntryAssembly()GetCallingAssembly()を試してみました

答えて

4

しないでください。

.NET Frameworkを自分のものではないプロセスに挿入することはできません。別のフレームワークが既にロードされているか、後で別のフレームワークバージョンをロードすることを望んでいる可能性があります。

GetModuleFileName(GetModuleHandle(NULL));を呼び出してホストプロセスの名前を取得できます。 (どちらのAPI呼び出しもP/Invoke。[1][2]です)。

+0

申し訳ありませんが、私はStackOverflowがアクセシビリティのバグを修正することはできません。 – Joshua

0

私はあなたの質問を正しく理解していれば、 "親プロセス"を見つけたいと思っています...これを行うには、管理している方法とP/Invokeを使う方法があります。 How to get parent process in .NET in managed way

関連する問題