可能重复:
How do I tell if a win32 application uses the .NET runtime
我有一个文件名,我检查这个文件是否存在于当前目录中,我的问题是我想知道这个文件(文件是可执行的)是.Net exe或常规exe。
答案 0 :(得分:1)
构造一个AssemblyName
,并在try-catch块中调用Assembly.Load
。如果没有异常,那就是.NET程序集。这不是防弹,但可能提供一种合理的入门方式。
答案 1 :(得分:1)
您可以使用Assembly.LoadFrom方法。如果程序集不是.NET程序集,或者依赖于较新版本的框架,则会抛出异常。只要您使用的是最新版本的框架,以下示例将仅在路径不是.NET程序集时返回false。
public bool IsNetAssembly (string path)
{
try
{
Assembly assembly = Assembly.LoadFrom(path);
return true;
}
catch (BadImageFormatException e)
{
Console.WriteLine("This is either not a .NET assembly, or is " +
"later than the current .NET framework");
return false;
}
}
答案 2 :(得分:1)
你可以这样做:
try
{
MessageBox.Show(System.Reflection.Assembly.LoadFrom(@"C:\test\csharptestapp.exe").ImageRuntimeVersion); //Valid, will return 4.0
MessageBox.Show(System.Reflection.Assembly.LoadFrom(@"C:\Windows\notepad.exe").ImageRuntimeVersion); //Invalid, will throw BadImageFormatException
}
catch (BadImageFormatException ex)
{
MessageBox.Show(ex.ToString());
}
答案 3 :(得分:0)
这里有一个类似的问题: How do I tell if a win32 application uses the .NET runtime
它说要使用Microsoft的PEVerify Tool
。