Können wir überprüfen, ob eine laufende Anwendung oder ein Programm .Net-Framework zur Ausführung verwendet?Wie überprüft man, ob ein Programm .NET verwendet?
Antwort
Es gibt einen Trick, den ich einmal von Scott Hanselman list of interview questions gelernt habe. Sie können ganz einfach alle Programme auflisten .NET in Eingabeaufforderung unter Verwendung:
tasklist /m "mscor*"
Es werden alle Prozesse aufgelistet, die mscor*
unter ihren geladenen Module haben.
Wir können die gleiche Methode in Code anwenden:
public static bool IsDotNetProcess(this Process process)
{
var modules = process.Modules.Cast<ProcessModule>().Where(
m => m.ModuleName.StartsWith("mscor", StringComparison.InvariantCultureIgnoreCase));
return modules.Any();
}
Beachten Sie, dass dies mögliche Mono-Prozesse auslässt. – Dykam
@Dykam Ist nicht Monos Laufzeit auch mscorlib.dll? –
Die Laufzeit ist nur "Mono". Oder 'mono.exe' in Windows. .Net verwendet PE, damit das Betriebssystem mscorlib.dll verwendet, um die App zu starten, aber mono macht keinen solchen Trick. Und die echte Core-Bibliothek heißt corlib.dll. Ich denke, da es nicht Corlib von MS ist. – Dykam
Verwenden Sie System.Reflection.Assembly.LoadFrom
Funktion, um die EXE-Datei zu laden. Diese Funktion löst eine Ausnahme aus, wenn Sie versuchen, eine Binärdatei zu laden, die keine .NET-Assembly ist.
-1: Er fragte nach einer laufenden Anwendung –
Welchen Unterschied macht es? laufende Anwendung hat keine .exe-Datei? –
In diesem Fall zeigen Sie ihm bitte, wie Sie die EXE-Datei finden, die dem laufenden Programm entspricht. und zeige ihm, wie er mit der Möglichkeit umgehen kann, dass sein Prozess keinen Lesezugriff auf die .EXE-Datei erhält. –
Programmatically werden Sie die Startbildnamen mit Win32-API wie NtQueryInformationProcess
oder in .Net Verwendung System.Diagnostics.Process.GetProcesses()
und lasen Process.StartInfo.FileName
bekommen.
dann öffnen und den PE-Header des Bildes dekodieren unter Verwendung von vorgeschriebenen Informationen in dem Artikel unten MSDN:
http://msdn.microsoft.com/en-us/magazine/cc301808.aspx
Caveats: nur .NET erkennen gebaut Baugruppen z.B. erkennt keine Win32-EXEs, die CLR dynamisch mit CorHost-APIs hosten.
Verwenden CLR COM-Schnittstellen ICorPublish und ICorPublishProcess. Der einfachste Weg, dies von C# zu tun ist, einen Code von SharpDevelop des Debuggers zu leihen, und gehen Sie wie folgt vor:
ICorPublish publish = new ICorPublish();
ICorPublishProcess process;
process = publish.GetProcess(PidToCheck);
if (process == null || !process.IsManaged)
{
// Not managed.
}
else
{
// Managed.
}
Ich frage mich, wenn Sie dies aus C# tun, unter welchen Bedingungen wird diese Überprüfung melden "nicht verwaltet"? – stakx
Es scheint, dass nur solche Prozesse berücksichtigt werden, die dieselbe CLR verwenden - https://social.msdn.microsoft.com/Forums/en-US/fac08eee-001d-4566-b1e7-fda1ddbc37e7/icorpublishgetprocess-throws- systemargumentexception-value-does-not-falle-in-the-expected? forum = netfxtoolsdev. Man sollte also vorsichtig damit sein. –
ich die Redgate DotNetReflector empfiehlt den Download und die Überprüfung, ob es um die Anwendung zu öffnen.
Ich weiß, das ist etwa eine Million Jahre zu spät, aber falls es hilft - meine Lieblingsmethode, um herauszufinden, ob eine Exe .net verwendet MSIL Disassembler dagegen laufen, die mit .net SDK kommt. Wenn Sie tatsächlich eine .net-Exe haben, erhalten Sie eine nette grafische Gliederung des Inhalts. Wenn eine einfache alte win32 exe es sein wird, erhalten Sie eine Nachricht, die Ihnen das sagt.
Gute Antwort. Führen Sie insbesondere ILDASM.EXE aus, das automatisch mit Visual Studio installiert wird. Siehe: http://msdn.microsoft.com/en-us/library/f7dy01k1(v=vs.110).aspx Um ILDASM von Win8/VS2013 zu starten: Start -> Visual Studio Tools -> Developer Eingabeaufforderung für VS2013 . Von Win8/VS2012: Start -> Entwickler-Befehl -> Entwickler-Eingabeaufforderung für VS2012. Von Win7: Alle Programme -> Microsoft Visual Studio -> Visual Studio Tools -> Visual Studio Eingabeaufforderung. –
Crank up Process Monitor und wenn die ausführbare Datei gelb markiert ist, ist es eine verwaltete Anwendung. Hurr. – Will
Will, ich denke du meinst Process Explorer;) –