
По сложным причинам мне пришлось сделать идентичную копию cmd.exe
и переименовать ее в cmd-2.exe
, которую я поместил в качестве ярлыка на панель задач, чтобы «сгруппировать» их в разные группы панели задач.
Иногда я забываю об этом и, чтобы открыть новый, cmd.exe
я нажимаю среднюю кнопку мыши на иконке на панели задач, чтобы открыть новый cmd.exe
. Затем я ввожу команду, например, dir
и она выдает кучу ерунды, включая: DNS bad key
, что происходит только если я случайно использую cmd-2.exe
, а не если я открываю «настоящий» cmd.exe
, так что это не «практическая» проблема.
Однако мне интересно, почему это сообщение вообще печатается. Видимо, не удается выполнить какой-то поиск DNS или что-то в этом роде? Почему DNS вообще участвует в выдаче dir
списка файлов на моем локальном компьютере? У меня не настроена сеть, нет облачных дисков, ничего подобного. Меня пугает, что (по-видимому) выполняются запросы DNS, когда я выдаю dir
.
Может быть, DNS bad key
имеется в виду что-то совершенно не связанное с системой доменных имен? Я даже не знаю, что такое "плохой ключ" в этом контексте.
решение1
Второй cmd.exe не может найти и впоследствии загрузить локализованные строки из библиотеки ресурсов-спутника cmd.exe.mui.
Вот что он на самом деле пытается сказать, взято из 10.0.18362.1 (160101.0800):
- 0x235F: "Том на диске %1 равен %2"
- 0x235B: «Серийный номер тома %1»
- 0x2339: "Каталог %1"
На самом деле это первые три строки простого dir
вывода команды.
Это забавно. В таблице системных сообщений по умолчанию нет записей для сообщений с номерами 0x235F и 0x235B. Поэтому для первых двух выходов вы получаете это зашифрованное сообщение, как показано на скриншоте консоли @harrymc.
Но для 0x2339 есть запись в таблице системных сообщений по умолчанию, физически хранящаяся в KernelBase.dll.mui, указывающая на текст «DNS bad key»:
Так уж получилось, что он разделяет номер строки "Directory of %1" ресурсов командного процессора: откат, не предусмотренный разработчиками cmd.exe. Так что ссылка на DNS — просто совпадение, это может быть что угодно.
Обратите внимание, что правильное сообщение содержит переменный аргумент (имя каталога), а сообщение DNS — нет. Думаю, именно поэтому после этого больше ничего не выводится — оно может просто завершиться.
решение2
Мне удалось воспроизвести проблему:
(Согласен, что сообщения не очень информативны.)
Проблема в том, что начиная с Vista все текстовые сообщения компилируются в отдельный файл, поэтому Windows будет искать файл сообщения с вашим новым именем CMD и не сможет его найти.
Недостаточно просто скопировать cmd.exe
в cmd-2.exe
. Вам также нужно скопировать в папку %WinDir%\System32\en-US
(или на вашем языке) файл cmd.exe.mui
в cmd-2.exe.mui
, иначе вы будете получать эти сумасшедшие сообщения каждый раз, когда cmd-2.exe
нужно выдать сообщение.
Примечание: «DNS» здесь не относится к Интернету. система доменных имен. Это просто совпадение.