如何知道a";。exe";过程是用C+编写的+;还是C#?

如何知道a";。exe";过程是用C+编写的+;还是C#?,c#,c++,exe,C#,C++,Exe,可能重复: 有一种方法可以手动识别特定的“.exe”进程是用C++(非托管代码)还是用C#(托管代码)编写的。您可以在文件上运行peverify或ildasm(可从Visual Studio命令行环境中获得),如果它不是托管代码,它将给您一个错误。请注意,在某些情况下,如果他们使用加密IL并隐藏CLR引导加载程序的保护系统,则此操作将失败,但大多数程序都没有此保护。此处您可以找到如何执行此操作的详细信息:如果您试图确定进程是否为.NET进程,我可以根据Dave Van den Eynde在本主

可能重复:


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

您可以在文件上运行peverify或ildasm(可从Visual Studio命令行环境中获得),如果它不是托管代码,它将给您一个错误。请注意,在某些情况下,如果他们使用加密IL并隐藏CLR引导加载程序的保护系统,则此操作将失败,但大多数程序都没有此保护。

此处您可以找到如何执行此操作的详细信息:

如果您试图确定进程是否为.NET进程,我可以根据Dave Van den Eynde在本主题中的回答提出一个解决方案:

“如果应用程序需要运行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);
            }
        }
foreach(var process in process.getprocesss())
{
if(process.Modules.OfType().Any(m=>m.ModuleName.Equals(“mscoree.dll”,StringComparison.OrdinalIgnoreCase)))
{
WriteLine(“{0}是一个.NET进程”,process.ProcessName);
}
}
如果它是.NET.exe(或.dll),它将依赖于mscoree.dll,您可以通过使用或类似的方法检查它来查看它

如果您想以编程的方式这样做,您可以将其作为一个起点


但这并不能确切地告诉你语言。你不能把C语言从VB.NET(或其他.NET语言)程序或C++从C程序(或其他非.NET语言)中分辨出来。有些事情可以排除其中一种语言是唯一使用的语言,或者使其中一种更可能。甚至可能有非托管代码以某种奇怪的方式使用mscoree.dll。

我已经可以说有一种方法,因为Process Explorer就是这样做的。现在我们必须找到如何:pTry用[Reflector][1]点击exe以查看出现了什么。[1] :请注意,用VB.NET编写的程序生成的可执行文件的“类型”与用C#编写的程序相同,您只能猜测用于创建非托管应用程序的内容。正如其他人提到的,您可以区分非托管代码和托管代码。通过编写您自己的代码或使用其他工具?您是希望以编程方式还是作为手动操作来执行此操作?是否“mscoree.dll”是C#托管代码二进制文件的主要dll资源?我能相信没有使用同一个DLL的C++二进制文件吗?它不是一个托管库,但是这个DLL中的所有东西都与.NETFramework有关。它不能保证进程是一个纯粹的.NET应用程序,但至少它承载了一些.NET代码。例如,如果在Microsoft Word中加载.NET加载项,此dll将显示在模块中,即使Word本身不是.NET应用程序。为什么用C编写的控制台应用程序在使用这种方式检查时不显示为托管应用程序?虽然这是一个很好的答案,但使用
=
比较字符串可能会产生误导,因为某些进程模块名称是
MSCOREE.DLL
。将
=
更改为
m.ModuleName.Equals(“mscoree.dll”,StringComparison.InvariantCultureInogoreCase)
是一个更安全的选择。@stt106说得好,谢谢。我编辑了应答链接,以正确的方式描述