当我按Ctrl+ Alt+ Del并单击“任务管理器”时,我注意到Windows将taskmgr.exe /3
作为命令进行调用。几个网站声称任务管理器没有命令行参数。
Windows为什么附加此参数?
LaunchTM.exe
我认为Windows 7中没有Windows 8。为什么不在超级用户上对此提出新的问题呢?;)
当我按Ctrl+ Alt+ Del并单击“任务管理器”时,我注意到Windows将taskmgr.exe /3
作为命令进行调用。几个网站声称任务管理器没有命令行参数。
Windows为什么附加此参数?
LaunchTM.exe
我认为Windows 7中没有Windows 8。为什么不在超级用户上对此提出新的问题呢?;)
Answers:
显然,这不是有记录的行为。我做了一些测试,并注意到了我的发现:
右键单击任务栏,然后单击启动任务管理器。
"C:\Windows\system32\taskmgr.exe" /4
按Ctrl+ Shift+ Esc。
taskmgr.exe /2
按Ctrl+ Alt+ Del,然后单击启动任务管理器。
taskmgr.exe /3
启动一个非高架任务管理器,然后单击“ 显示所有用户的进程”按钮。
"C:\Windows\system32\taskmgr.exe" /1
taskmgr.exe
在开始菜单搜索栏中键入或粘贴,然后按Enter;按Win+ R,taskmgr.exe
在文本框中键入或粘贴,然后按Enter;导航到该System32
文件夹并双击taskmgr.exe
可执行文件;启动系统配置实用程序(msconfig.exe
),单击“ 工具”选项卡,从列表中选择“任务管理器”项,然后单击“ 启动”。
"C:\Windows\system32\taskmgr.exe"
打开命令提示符,键入或粘贴taskmgr.exe
,然后按Enter。
taskmgr.exe
在Windows 8的开发阶段,直到Release Preview之前,事情以类似的方式工作。Windows Vista和更早的操作系统不受影响。
该可执行文件导入了两个API函数(即GetCommandLineW
和CommandLineToArgvW
),这些函数用于检索和解析命令行参数。
使用上面的任何参数手动启动程序似乎没有任何明显的效果。
如果必须做出有根据的猜测,我会说数值参数是一个内部启动指示器,可能用于调试目的,然后被抛在后面。
taskmgr /anything /startup
起作用,因此/startup
作为第二个参数。
一些注意事项:
仅发送命令并不意味着程序接受这些参数或任何参数。
例如:
我用自己的奇数命令给taskmanager打电话,行为没有改变:
从基本的编程角度来看,任何应用程序都将具有某种可以传递参数的main方法。例如,一个基本的Windows Form C#应用程序如下所示:
private void Form1_Load(object sender, EventArgs e)
{
}
如果传入一些有趣的参数,应用程序将不会发生任何事情,但是Process Explorer将捕获并显示它们。
但是,如果我明确决定处理它们,您将从命令中获得交互。
我要做的就是稍微更改表单的入口点:
private void Form1_Load(object sender, EventArgs e)
{
string arguments = Environment.GetCommandLineArgs()[1];
this.Text = arguments;
}
现在,回到关于为什么它存在的问题:
如果从ctrl+ alt+ del方法访问taskmgr.exe ,则确实会看到命令参数“ / 3”。同样,如果使用ctrl+ shift+,esc则传递/ 2,并且如果右键单击任务栏并单击“启动任务管理器”,则显示的开关为/ 4。
所有这些使我假设Windows可能需要了解一些知识,或者几乎是为我们不知道的Taskmanager实现的。例如,Windows中的安全性可能想知道是否使用ctrl+ alt+ del来调用taskmgr.exe,而不是脚本或用户。同样,纯粹的猜测,但是像这样的线索使我认为这至少是一个想法。
对于臭名昭著的tl; dr
要知道Windows为什么要传递这些命令,我们可能需要Microsoft开发团队的成员或源代码。可能没有更好的答案。
LaunchTM.exe
,%windir%\System32
这也使我无法弄清它变得更加混乱,这也基于我的Google搜索,它的存在目的以及它的总体优点。