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


12

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

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

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


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

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

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


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, либо исходный код. Там не может быть лучшего ответа.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.