tmytのらくがき

個人の日記レベルです

あるプロセスが読み込んでいる.NET Coreランタイムを特定したい

なんか表題のことがしたいらしく、よく聞いたら任意の.NET Coreプロセスが読み込んでいるcoreclr.dllのパスが知りたいという話でした。

coreclr.dllで.NET Core仮想マシンをホストしてるんだから、プロセスが読み込んでるモジュールを列挙したらわかるでしょ。とか思って、Processの情報を眺めたら、彼はそこに常にいたので、それを探したらお悩みは解決。

どうやらC#で解決したいらしいので、とりあえずpsapiからEnumしただけでおわり。

gist.github.com

EnumProcessesでプロセスを列挙してOpenProcessにPROCESS_VM_READとPROCESS_QUERY_INFORMATIONをつけてプロセスハンドルを手に入れて、EnumProcessModulesExでモジュールハンドルを列挙して、GetModuleFileNameExでモジュールのパスを取得する。そこにcoreclr.dllがあればそいつが.NET Coreプロセスだ!

という話でした。