2010-06-18 10 views
0

HKEY_LOCAL_MACHINE, "LOGICIEL \ Microsoft \ Windows NT \ CurrentVersion \ Winlogon", "Shell" renvoie le nom du shell, généralement Explorer.exe. Cependant, il ne contient pas le chemin ou n'identifie pas un fichier exécutable particulier.Déterminer quel Explorer.exe sur la liste des tâches est vraiment le shell?

L'énumération de la liste des tâches permet de localiser la tâche Explorer.exe. Mais que se passe-t-il si l'utilisateur a exécuté une autre tâche sans rapport appelée Explorer.exe?

Quelle est la meilleure façon de déterminer qu'une instance particulière de Explorer.exe est réellement le shell?

J'ai besoin pour éviter toute confusion entre la tâche (s) qui sont la coquille et des tâches qui ne peuvent pas être la coquille, mais le même nom-à-dire Explorer.exe

+0

Je ne suis pas sûr que ce soit une réponse solide, mais vous avez l'habitude, il va être l'instance explorer.exe avec le PID le plus bas (comme il commence avant le reste). Je pourrais voir où ce serait un problème sur les systèmes à long terme où les PID pourraient commencer à recycler. – CodingGorilla

+0

@Coding Gorilla: Cela échoue dans les environnements multi-utilisateur. –

Répondre

0

Vous pouvez utiliser Process Explorer pour obtenir plus de détails sur le processus. Vous seriez en mesure de dire par les programmes en cours d'exécution sous chaque processus d'exploration, l'emplacement du fichier de processus de l'explorateur, et un couple d'autres choses.

+0

Merci, mais je dois le faire par programme (j'ai C++ native ou .NET) pour identifier toutes les instances de Explorer.exe (ou quel que soit le nom du shell) sur le système dans toutes les sessions qui sont réelles réelles du Shell. – BillyG

+0

Vous pouvez toujours rechercher l'emplacement de l'exécutable en cours d'exécution, etc. de manière problématique pour trouver la réponse. Envisagez d'ajouter des étiquettes de langue spécifiques ou de clarifier votre question. – Davis

+0

Bien sûr, il est possible de trouver le chemin vers l'exécutable. Mais comment dire si cet exécutable est le shell? Autant que je sache, Windows regarderait sa liste de chemins pour essayer de trouver Explorer.exe car aucun chemin n'est spécifié dans le registre. Mais cela semble être un très long chemin pour deviner quel exe Windows * probablement * utilisé pour le shell. – BillyG

0

Peut-être que vous pouvez utiliser la ligne de commande utilitaire tasklist comme suit:

tasklist /FI "imagename eq explorer.exe" /FI "session eq 1" /FI "sessionname eq Console" 
0

Ne cherchez pas Explorer.exe, chercher le chemin complet de la coque, qui devrait être C:\Windows\Explorer.exe.

+0

Le problème est que l'entrée Shell dans le registre (voir top of OP) ne contient que Explorer.exe – BillyG

+0

@BillyG: L'emplacement complet est résolu à l'aide de la variable d'environnement PATH. Vous pouvez résoudre vous-même l'emplacement correct (en utilisant, par exemple, la fonction PathFindOnPath). Vous pouvez également probablement utiliser% WINDIR% \ Explorer.exe, car peu de personnes vont remplacer complètement le shell. –

0

Je ne pense pas qu'il existe une méthode infaillible; le mieux que vous puissiez faire est émulent ce CreateProcess fait:

Si le nom de fichier ne contient pas un chemin de répertoire, le système recherche pour le fichier exécutable dans la séquence suivante:

  1. Le répertoire à partir duquel l'application chargée.
  2. Le répertoire en cours pour le processus parent.
  3. Le répertoire système Windows 32 bits. Utilisez la fonction GetSystemDirectory pour obtenir le chemin de ce répertoire.
  4. Le répertoire système Windows 16 bits. Il n'y a aucune fonction qui obtient le chemin de ce répertoire, mais il est recherché. Le nom de ce répertoire est System.
  5. Le répertoire Windows. Utilisez la fonction GetWindowsDirectory pour obtenir le chemin de ce répertoire.
  6. Les répertoires répertoriés dans la variable d'environnement PATH.