这不是以下问题的重复项:
How do I tell if a win32 application uses the .NET runtime。
如何以编程方式找出给定的exe文件是.net exe文件还是常规的WIN32/WIN64 exe文件?
问题不在于询问正在运行的进程,而是关于一个exe文件,并且正如标签所暗示的那样,不需要用VB.net或C#编写的解决方案。
我需要带有签名的函数,例如:
// return true if filename is a exe file for .Net
bool IsExeFileDotNet(LPCTSTR filename)
{
...
}
最佳答案
一种方法是询问PE header 等以获取正确的标志。有几个链接可供进一步阅读; here和here(以及较旧的MSDN文章here)。
PE header is available (with a license agreement)上的MS文档。
最简单的方法可能就是list the dependent dlls(因为这仅用于主exe),然后查找mscoree.dll的存在。导入表将包含mscoree.dll以及函数_CorExeMain
的包含和条目(来自mscoree.dll)。关于此的更多链接,可以找到here on SO和here on GitHub, that appears to be an extensive sample,以及this article (on CodeGuru),其中包含具有您需要的签名BOOL IsManaged(LPTSTR lpszImageName)
的功能的代码(许可证似乎限制了重新发布)。