我们怎么能找到一个exe文件是.Net exe或常规exe?

时间:2012-02-22 14:05:24

标签: .net file exe

  

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

我有一个文件名,我检查这个文件是否存在于当前目录中,我的问题是我想知道这个文件(文件是可执行的)是.Net exe或常规exe。

4 个答案:

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