Подтвердить что ты не робот

Как проверить, использует ли программа .NET?

Можно ли проверить, работает ли запущенное приложение или программа .Net framework для выполнения?

4b9b3361

Ответ 1

Вот трюк, который я когда-то узнал из списка вопросов о опросе Scott Scott Hanselman . Вы можете легко перечислить все программы, запущенные в командной строке .NET, с помощью:

tasklist /m "mscor*"

В нем будут перечислены все процессы с mscor* среди загруженных модулей.

Мы можем применить тот же метод в коде:

public static bool IsDotNetProcess(this Process process)
{
  var modules = process.Modules.Cast<ProcessModule>().Where(
      m => m.ModuleName.StartsWith("mscor", StringComparison.InvariantCultureIgnoreCase));

  return modules.Any();
}

Ответ 2

Используйте COM-интерфейсы CLR ICorPublish и ICorPublishProcess. Самый простой способ сделать это из С# - заимствовать некоторый код из отладчика SharpDevelop и сделать следующее:

ICorPublish publish = new ICorPublish();
ICorPublishProcess process;

process = publish.GetProcess(PidToCheck);

if (process == null || !process.IsManaged)
{
    // Not managed.
}
else
{
    // Managed.
}

Ответ 3

Используйте функцию System.Reflection.Assembly.LoadFrom для загрузки файла .exe. Эта функция будет генерировать исключение, если вы попытаетесь загрузить двоичный файл, который не является сборкой .NET.

Ответ 4

Программно вы получите начальное имя изображения, используя Win32 API, например NtQueryInformationProcess, или в .Net use System.Diagnostics.Process.GetProcesses() и прочитайте Process.StartInfo.FileName.

Затем откройте и декодируйте заголовки PE этого изображения, используя сведения, предписанные в статье MSDN ниже:

http://msdn.microsoft.com/en-us/magazine/cc301808.aspx

Предостережения: будут обнаруживать только .NET-сборки, например. не обнаружит Win32 EXEs, динамически размещающих CLR, используя API-интерфейсы CorHost.

Ответ 5

Я знаю, что это около миллиона лет слишком поздно, но в случае, если это помогает - мой любимый метод выяснить, использует ли exe.net, запустить MSIS дизассемблер против него, который поставляется с .net SDK. Если у вас действительно есть .net exe, вы получите красивое графическое разбиение его содержимого; если обычный старый win32 будет таким, вы получите сообщение, сообщающее вам об этом.

Ответ 6

Я предлагаю загрузить Redgate DotNetReflector и проверить, может ли он открыть приложение.