确定任务列表上的哪个Explorer.exe真的是shell?

时间:2010-06-18 18:35:46

标签: c# c++ shell process explorer

HKEY_LOCAL_MACHINE,“SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Winlogon”,“Shell”返回shell名称,通常是Explorer.exe。但是,它不包含路径,或标识特定的可执行文件。

枚举任务列表可找到任务Explorer.exe。

但是如果用户运行了另一个名为Explorer.exe的无关任务呢?

确定Explorer.exe的特定实例实际上是shell的最佳方法是什么?

我需要避免在作为shell的任务和可能不是shell的任务之间混淆,但是共享相同的名称,即Explorer.exe

4 个答案:

答案 0 :(得分:0)

您可以使用Process Explorer获取有关该过程的更多详细信息。您可以通过每个资源管理器进程下运行的程序,资源管理器进程文件的位置以及其他一些事情来判断。

答案 1 :(得分:0)

也许您可以使用命令行实用程序任务列表,如下所示:

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

答案 2 :(得分:0)

不要查找Explorer.exe,查找shell的完整路径,该路径应为C:\Windows\Explorer.exe

答案 3 :(得分:0)

我认为没有一种万无一失的方法;你能做的最好就是模仿CreateProcess所做的事情:

  

如果文件名不包含目录路径,系统将按以下顺序搜索可执行文件:

     
      
  1. 加载应用程序的目录。
  2.   
  3. 父进程的当前目录。
  4.   
  5. 32位Windows系统目录。使用GetSystemDirectory函数获取此目录的路径。
  6.   
  7. 16位Windows系统目录。没有函数可以获取此目录的路径,但会搜索它。该目录的名称是System。
  8.   
  9. Windows目录。使用GetWindowsDirectory函数获取此目录的路径。
  10.   
  11. PATH环境变量中列出的目录。
  12.