Taskmgr.exe вызывается с аргументом Windows 7

12

Я заметил, когда я нажимаю Ctrl+ Alt+ Delи нажимаю Диспетчер задач, Windows вызывает taskmgr.exe /3как команду. Некоторые веб-сайты утверждают, что диспетчер задач не имеет аргументов командной строки.

Диспетчер задач Процессы в проводнике процессов

Почему Windows присоединяет этот аргумент?

Modix
источник
Кроме того, есть еще одна, меньшая весовая , LaunchTM.exeв %windir%\System32котором делает его еще более запутанной , так как я не мог понять, на основе моего поиска Google, а его цель существования и то , что это хорошо для в целом.
@ Chinggis6 Нет LaunchTM.exeв Windows 7, вы на Windows 8, я думаю. Почему бы не создать новый вопрос об этом здесь на суперпользователе? ;)
modiX

Ответы:

13

Анализ

Очевидно это не задокументированное поведение. Я сделал несколько тестов и отметил мои выводы:

  • Щелкните правой кнопкой мыши панель задач и выберите « Запустить диспетчер задач» .

    "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), которые используются для получения и анализа аргументов командной строки.

  • Ручной запуск программы с использованием любого из приведенных выше аргументов, кажется, не имеет заметного эффекта.

Если бы мне пришлось сделать обоснованное предположение, я бы сказал, что числовой параметр должен был быть внутренним индикатором запуска, возможно, использовался для целей отладки и затем оставлялся позади.

and31415
источник
5
"taskmgr / 7 / startup" => начать с вкладки "Автозагрузка" впереди! (Windows 8.1) - но ни «taskmgr / startup / 7», ни «taskmgr / startup» этого не делают! (Дополнительные сведения: Пожалуйста, объясните алгоритм синтаксического анализа командной строки taskmgr.exe с учетом этого доказательства ...)
Давидбак
1
@davidbak taskmgr /anything /startupработает, так /startupкак второй аргумент.
Мишель де Рюйтер
@MicheldeRuiter - Да. Это убило бы их, чтобы позволить аргументы в любом порядке? Вызвали дополнительную работу в QA? Задержали дату отправки? HUH ????
Давидбак
2

Несколько заметок:

То, что команда отправлена, не означает, что программа принимает эти аргументы или любые другие.

Например:

Я вызвал 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;
        }

Теперь вернемся к вашему вопросу о том, почему это так:

Если вы обращаетесь к taskmgr.exe из метода ctrl+ alt+ del, вы действительно видите аргумент команды "/ 3". Также, если вы используете ctrl+ shift+, escон передает / 2, и если вы щелкнете правой кнопкой мыши на панели задач и нажмете «Запустить диспетчер задач», показанный переключатель будет / 4.

Все это заставляет меня предположить, что, возможно, Windows что-то нужно знать, или, возможно, она почти реализована для диспетчера задач, о котором мы не знаем. Например, для безопасности в Windows может потребоваться узнать, использовался ли ctrl+ alt+ delдля вызова taskmgr.exe, а не сценария или пользователя. Опять же, чистые спекуляции, но подобные темы заставляют меня думать, что это могла быть хотя бы мысль.


Для печально известного TL; Dr

Чтобы узнать, почему Windows передает эти команды, нам, скорее всего, нужен либо член команды разработчиков Microsoft, либо исходный код. Там не может быть лучшего ответа.

Остин Т Френч
источник