Iga*_*nik 41
我曾经从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();
}
Run Code Online (Sandbox Code Playgroud)
wj3*_*j32 11
使用CLR COM接口ICorPublish和ICorPublishProcess.从C#执行此操作的最简单方法是从SharpDevelop的调试器中借用一些代码,并执行以下操作:
ICorPublish publish = new ICorPublish();
ICorPublishProcess process;
process = publish.GetProcess(PidToCheck);
if (process == null || !process.IsManaged)
{
// Not managed.
}
else
{
// Managed.
}
Run Code Online (Sandbox Code Playgroud)
使用System.Reflection.Assembly.LoadFrom函数加载.exe文件.如果您尝试加载非.NET程序集的二进制文件,此函数将抛出异常.
以编程方式,您可以使用Win32 API获取起始图像名称NtQueryInformationProcess,或者使用.Net使用System.Diagnostics.Process.GetProcesses()
和读取Process.StartInfo.FileName.
然后使用以下MSDN文章中规定的详细信息打开并解码该图像的PE标头:
http://msdn.microsoft.com/en-us/magazine/cc301808.aspx
警告:将仅检测.NET构建的程序集,例如,不会使用CorHost API检测动态托管CLR的Win32 EXE.
小智 6
我知道这是关于一万年为时已晚,但在情况下,它可以帮助 - 我最喜欢的方法找出如果一个EXE使用.NET是针对它运行MSIL反附带.NET SDK.如果你确实拥有.net exe,你会得到一个很好的图形细分其内容; 如果一个普通的旧win32 exe,它会收到一条消息告诉你.
| 归档时间: |
|
| 查看次数: |
21878 次 |
| 最近记录: |