Comment vérifier si un programme utilise .NET?
Peut-on vérifier si une application est en cours ou un programme .Net framework pour exécuter lui-même?
- Montez le Moniteur de Processus et si l'exécutable est surligné en jaune c'est une application gérée. Hurr.
- Va, je pense que vous vouliez dire, Process Explorer 😉
Vous devez vous connecter pour publier un commentaire.
Il y a un truc que j'ai appris une fois de Scott, Hanselman de liste des questions d'entrevue. Vous pouvez facilement la liste de tous les programmes en cours d'exécution .NET dans l'invite de commande en utilisant:
Il fournira la liste de tous les processus qui ont
mscor*
parmi leurs modules chargés.Nous pouvons appliquer la même méthode dans le code:
mono
. Oumono.exe
sur windows. .Net utilise PE de laisser l'utilisation du système d'exploitation mscorlib.dll pour démarrer l'application, mais la mono ne pas faire un tel truc. Et le cœur lib est appelé corlib.dll je pense que, comme il n'est pas MME de corlib.Utiliser le CLR interfaces COM ICorPublish et ICorPublishProcess. La façon la plus simple de le faire à partir de C# est d'emprunter une partie du code à partir de SharpDevelop du débogueur, et effectuez les opérations suivantes:
Utilisation
System.Reflection.Assembly.LoadFrom
fonction pour charger le .exe fichier. Cette fonction va lever une exception si vous essayez de charger un fichier binaire qui ne l'est pas .NET de l'assemblée.Par programme, vous obtiendrez de départ nom de l'image à l'aide de l'API Win32, comme
NtQueryInformationProcess
, ou dans .Net useSystem.Diagnostics.Process.GetProcesses()
et lire
Process.StartInfo.FileName
.Puis d'ouvrir et de décoder le PE-têtes de l'image à l'aide de détails prescrits dans l'article MSDN ci-dessous:
http://msdn.microsoft.com/en-us/magazine/cc301808.aspx
Mises en garde: ne détectera .NET construit assemblées par exemple, de ne pas détecter Win32 Exe dynamiquement hébergement CLR à l'aide de CorHost Api.
Je sais que c'est environ un million d'années trop tard, mais au cas où il permet - mon préféré de la méthode pour déterminer si un fichier exe est l'aide .net est d'exécuter MSIL désassembleur contre lui, qui vient avec .net SDK. Si un .net exe vous avez en effet, vous aurez une belle interface graphique rupture de son contenu; si un simple vieux win32 exe-il, vous obtiendrez un message vous en informant.
Je suggère de télécharger le Redgate de DotNetReflector et de vérifier si elle peut ouvrir l'application.
Une liste de course .NET processus est disponible dans
Performance Monitor
. Il suffit d'exécuterperfmon
et dans le Outils de Suivi >> Moniteur de Performances cliquez sur + Icône ou appuyez sur Ctrl+N. Dans la liste des compteurs disponibles, au début de la liste trouver .NET CLR Jit et sélectionner un sous-élément. Vous verrez une liste de .NET processus Instances de l'objet sélectionné liste.Si vous voulez une méthode en C# sans l'exécution de votre application en mode Administrateur, il y a la solution introduite par Processus de Hacker outil.
Selon Process Hacker /.NET Tools /native.c :
Obtention d'une liste de Processus poignées en C# c'est un peu de travail dur. Au lieu de cela, vous pouvez télécharger le DotNetTools.dll de Processus Hacker
plugins
dossier et de créer unextern
de la méthode à utiliserPhGetProcessIsDotNet
fonction.