2012-02-22 3 views
1

Можно создать дубликат:
How do I tell if a win32 application uses the .NET runtimeКак мы могли найти один файл exe: .Net exe или обычный exe?

У меня есть имя файла, и проверить этот файл существует в текущем каталоге, моя проблема в том, что я хочу знать этот файл (файл является исполняемым) является .Net exe или регулярным exe.

+0

Является ли это программирование вопрос, или вы просто спросить, как узнать? – Oded

+0

Это вопрос программирования – MRM

+0

related: http://stackoverflow.com/questions/2638883/how-does-windows-differentiate-between-a-regular-exe-and-a-net-exe – AakashM

ответ

1

Вы можете использовать метод Assembly.LoadFrom. Это вызовет исключение, если сборка не является сборкой .NET или полагается на более новую версию фреймворка. Пока вы используете последнюю версию фреймворка, следующий образец вернет false только тогда, когда путь не является сборкой .NET.

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; 
    } 
} 
+0

Спасибо, что помогли мне – MRM

1

Постройте AssemblyName и позвоните Assembly.Load в блок try-catch. Если вы не получите исключения, это сборка .NET. Это не пуленепробиваемый, но может обеспечить разумный способ начать работу.

+0

Просто для информации. Но если я использую 32bit prog и попробую этот метод на 64-битной сборке, что произойдет? – Steve

+1

@Steve [BIFE] (http://msdn.microsoft.com/en-us/library/system.badimageformatexception.aspx), конечно. – dasblinkenlight

+0

Спасибо за помощь – MRM

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()); 
} 
+0

Спасибо, что помогли мне – MRM

Смежные вопросы