简体   繁体   中英

How do I determine if a Process is Managed in C#?

A bit of searching returns this result: Which processes are running managed code and which version?

However I am wondering if there is a 'better' way then simply iterating though the loaded modules? It seems a little quirky to look for the string "mscorwks.dll". Reading though the Process Class on MSDN doesn't seem to point out an obvious solution.

Assumptions Made

  1. .NET 4.0
  2. I have a "Process" in hand

Thank you

For any future Googlers: I ended up using the suggested answer posted here How to check if a program is using .NET? (thanks 0xA3!)

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

As an aside looking for "mscorwks.dll" as mentioned in my original post does not work for .NET 4.0.

In code, get the full path of the executing process. Try to use Assembly.Load on the process. If it works, it's a .Net assembly :)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM