可能重复:
How do I tell if a win32 application uses the .NET runtime
有一种方法可以手动识别特定的“.exe”进程是用C ++(非托管代码)还是用C#(托管代码)编写的?
答案 0 :(得分:8)
如果您正在尝试确定进程是否为.NET进程,我可以根据Dave Van den Eynde在此主题中的回答建议一个解决方案:How do I tell if a win32 application uses the .NET runtime
“如果应用程序需要运行mscoree.dll,则该应用程序是.NET可执行文件。”。
鉴于此,您检查进程的模块以查看是否列出了mscoree。
foreach (var process in Process.GetProcesses())
{
if (process.Modules.OfType<ProcessModule>().Any(m => m.ModuleName.Equals("mscoree.dll", StringComparison.OrdinalIgnoreCase)))
{
Console.WriteLine("{0} is a .NET process", process.ProcessName);
}
}
答案 1 :(得分:5)
答案 2 :(得分:2)
您可以在文件上运行peverify或ildasm(可从Visual Studio命令行环境获得),如果它不是托管代码,则会出错。请注意,在某些使用保护系统加密IL并隐藏CLR引导加载程序的情况下,这会失败,但大多数程序都没有这种保护。
答案 3 :(得分:1)
如果它是.NET .exe(或.dll),它将依赖于mscoree.dll,您可以通过Dependency Walker或类似的东西来查看它。
如果您想以编程方式执行此操作,可以将this VB project作为起点。
虽然这不会告诉你语言。您无法从VB.NET(或其他.NET语言)程序或C程序(或其他非.NET语言)中的C ++中分辨出C#。有些事情可以将一种或另一种视为唯一使用的语言,或使一种或另一种更有可能。甚至可能有非托管代码以某种奇怪的方式使用mscoree.dll。