如何知道“.exe”进程是用C ++还是C#编写的?

时间:2011-12-08 15:12:32

标签: c# c++ exe

  

可能重复:
  How do I tell if a win32 application uses the .NET runtime

有一种方法可以手动识别特定的“.exe”进程是用C ++(非托管代码)还是用C#(托管代码)编写的?

4 个答案:

答案 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)

您可以在此处找到详细信息:Determining Whether a DLL or EXE Is a Managed Component

答案 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。