Почему моя командная строка зависает в Windows 10?

154

Я добавляю этот вопрос, потратив целый день на борьбу с этой невероятно неприятной функцией командной строки Windows 10, которая заставила меня подумать, что с кодом моего консольного приложения что-то не так. Надеюсь, это кому-то поможет.

Проблема: мое консольное приложение перестает работать случайным образом. Что здесь происходит?

Шон Роуэн
источник
2
Также вам нужно нажать Enter, чтобы продолжить работу программы
wrivas

Ответы:

286

Проблема оказалась в новой функции консоли Windows 10. В конфигурации по умолчанию всякий раз, когда вы щелкаете по командному окну в Windows 10, он немедленно останавливает процесс приложения, когда пытается записать в консоль. Когда это происходит, командное окно переходит в режим «выбора».

Вы можете сказать, что это произошло, потому что в строке заголовка командного окна будет стоять слово «Выбрать»:

замороженное командное окно

Чтобы ваша программа снова заработала, вам нужно нажать escape или щелкнуть в другом месте.

Чтобы избавиться от этого странного поведения, вы можете отключить режим QuickEdit:

отключить режим QuickEdit

Шон Роуэн
источник
28
Бог благодарит тебя! Занимаюсь этим год LOL. Также вам, возможно, придется проанализировать опцию, ЗАКРЫТЬ терминал и снова открыть его. По крайней мере, у меня это работает (иначе он снова включит его автоматически)
user2875289,
4
У меня была многочасовая работа по компиляции, которая постоянно зависала из-за этого. Так рада, что вы опубликовали решение!
Joel
2
Хотя этот ответ помог отключить замораживание при щелчке, прокрутка боковой панели также замораживает его. Предыдущее поведение было зависанием при удерживании полосы прокрутки, а вывод выводился на печать, когда вы отпускали полосу прокрутки. Есть идеи, как вернуться к старому поведению / разморозить его? Esc или Enter не работают.
quimnuss
6
это очень старая функция для более быстрого копирования и вставки. Просто Windows 10 начинает включать его по умолчанию. Как отключить вставку правой кнопкой мыши в PowerShell?
phuclv
3
«Функция, а не ошибка» - проклятие для пользователей во всем мире
tschwab
23

Что я хотел бы добавить здесь к ответу Шона Роуэна, так это то, что для того, чтобы он работал во всех окнах консоли, вам нужно нажать «По умолчанию» вместо «Свойства» и внести там свои изменения, как описано в этом сообщении .

iko79
источник
0

Я столкнулся с этой проблемой совсем недавно, когда один из пользователей (у которого был настроен Quickedit в своей командной строке) использовал инструмент, который я разработал на Java, и замораживал инструмент во время его запуска из командной строки.

Наконец, проблема была решена путем перенаправления записи из пакетного сценария в файл, как показано ниже:

@echo off
...
java.exe -jar mytool.jar

необходимо обновить до

java.exe -jar mytool.jar > log.txt
Приянку
источник
Связанный superuser.com/questions/459609/…
rsinha
1
Для разработчиков эта ветка может быть интересна, вы можете отключить это поведение программно, используя SetConsoleMode(kernel32.dll).
Гру