Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,051
Записей в блоге: 1
.NET 6

Как разморозить консоль

11.09.2025, 19:31. Показов 1168. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть некая серверная служба. Она запущена как консольное приложение и периодически туда чего то шлёт.
Я встраиваюсь в эту службу плагином (т.е. при старте службы стартует и мой плагин в её домене) и выполняю очень долгую трудоемкую операцию периодически тоже что-то выводя в эту консоль (лог). По завершении моих действий консоль/служба продолжают работать дальше. Действия проводятся на Win Server.
Так вот, есть большая доля вероятности, что кто-то тыкнет в консоль мышкой и в результате она превратится в ожидание ввода, что заблокирует вывод лога и по сути остановит программу ("консоль зависла"). От этого отлично помогает тыкнуть в консоль и жмакнуть Esc, но для этого надо знать что она зависла)) что вообще не всегда возможно.

Вопрос, что бы такого написать, что периодически бы "отпускало" консоль, так как реально там НЕ подразумевается ввод, только вывод.

Настройки вот из этой темы сделать можно, но а можно их и отменить (человеческий сисадмин фактор)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.09.2025, 19:31
Ответы с готовыми решениями:

Не выводит текст в консоль, открывается пустая консоль без текста
Приложение должно вызывать консоль при выполнении каких то условий. В консоль записывается текст...

Буферизация вывода в консоль, и цветной вывод в консоль
Потребовалось реализовать цветной вывод массивов в консоль(некоторые значения выделить зеленым)....

Как открыть консольное приложение в .NET через другое консольное приложение .NET
Есть один вопрос. Как открыть консольное приложение .NET через другое консольное приложение .NET,...

11
Эксперт .NET
 Аватар для Rius
13205 / 7733 / 1681
Регистрация: 25.05.2015
Сообщений: 23,575
Записей в блоге: 14
11.09.2025, 19:48
Лучший ответ Сообщение было отмечено skilllab как решение

Решение

А ежели юзеру реально надо, а вы не позволите?...

https://learn.microsoft.com/ru... onsolemode
ENABLE_QUICK_EDIT_MODE 0x0040
Этот флаг позволяет пользователю использовать мышь для выбора и редактирования текста. Чтобы включить этот режим, используйте ENABLE_QUICK_EDIT_MODE | ENABLE_EXTENDED_FLAGS. Чтобы отключить этот режим, используйте ENABLE_EXTENDED_FLAGS без этого флага.
1
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,051
Записей в блоге: 1
11.09.2025, 20:12  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
реально надо
Нет. Весь смысл службы как консоль в том, чтобы показывать отладочную и прочую информации. Ввод там не подразумевается. Потому как службу можно запустить и по другому, без консоли. И опять же, хошь - хоть войну и мир там печатай, но только после моего кода.
0
Эксперт .NET
 Аватар для Rius
13205 / 7733 / 1681
Регистрация: 25.05.2015
Сообщений: 23,575
Записей в блоге: 14
11.09.2025, 20:14
Цитата Сообщение от skilllab Посмотреть сообщение
Нет. Весь смысл службы как консоль в том, чтобы показывать отладочную и прочую информации. Ввод там не подразумевается.
А фича этого режима не только ввод, но и остановить постоянно убегающую прокрутку, выделить мышкой нужный участок и скопировать в буфер обмена.
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,051
Записей в блоге: 1
11.09.2025, 21:25  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
фича этого режима не только ввод
Повторюсь, пока работает мой код ничего из этого делать не надо. Вывод непосредственно самой службы тоже не важен. Ничто не важно - лишь мой код)) это изолированная среда от ... пользователей, но не изолирована от сисадминов с разной степенью увлеченности своими руками.
Кроме того, лог службы всё равно ведётся в файл)) куда и я пишу.

Добавлено через 35 минут
Цитата Сообщение от Rius Посмотреть сообщение
ENABLE_QUICK_EDIT_MODE
Полное решение
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
using System;
using System.Runtime.InteropServices;
 
public static class ConsoleWindow
{
    private static class NativeFunctions
    {
        public enum StdHandle : int
        {
            STD_INPUT_HANDLE = -10,
            STD_OUTPUT_HANDLE = -11,
            STD_ERROR_HANDLE = -12,
        }
 
        [DllImport("kernel32.dll", SetLastError = true)]
        public static extern IntPtr GetStdHandle(int nStdHandle); //returns Handle
 
        public enum ConsoleMode : uint
        {
            ENABLE_ECHO_INPUT = 0x0004,
            ENABLE_EXTENDED_FLAGS = 0x0080,
            ENABLE_INSERT_MODE = 0x0020,
            ENABLE_LINE_INPUT = 0x0002,
            ENABLE_MOUSE_INPUT = 0x0010,
            ENABLE_PROCESSED_INPUT = 0x0001,
            ENABLE_QUICK_EDIT_MODE = 0x0040,
            ENABLE_WINDOW_INPUT = 0x0008,
            ENABLE_VIRTUAL_TERMINAL_INPUT = 0x0200,
 
            //screen buffer handle
            ENABLE_PROCESSED_OUTPUT = 0x0001,
            ENABLE_WRAP_AT_EOL_OUTPUT = 0x0002,
            ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x0004,
            DISABLE_NEWLINE_AUTO_RETURN = 0x0008,
            ENABLE_LVB_GRID_WORLDWIDE = 0x0010
        }
 
        [DllImport("kernel32.dll", SetLastError = true)]
        public static extern bool GetConsoleMode(IntPtr hConsoleHandle, out uint lpMode);
 
        [DllImport("kernel32.dll", SetLastError = true)]
        public static extern bool SetConsoleMode(IntPtr hConsoleHandle, uint dwMode);
    }
 
    public static void QuickEditMode(bool Enable)
    {
        //QuickEdit lets the user select text in the console window with the mouse, to copy to the windows clipboard.
        //But selecting text stops the console process (e.g. unzipping). This may not be always wanted.
        IntPtr consoleHandle = NativeFunctions.GetStdHandle((int)NativeFunctions.StdHandle.STD_INPUT_HANDLE);
        UInt32 consoleMode;
 
        NativeFunctions.GetConsoleMode(consoleHandle, out consoleMode);
        if (Enable)
            consoleMode |= ((uint)NativeFunctions.ConsoleMode.ENABLE_QUICK_EDIT_MODE);
        else
            consoleMode &= ~((uint)NativeFunctions.ConsoleMode.ENABLE_QUICK_EDIT_MODE);
 
        consoleMode |= ((uint)NativeFunctions.ConsoleMode.ENABLE_EXTENDED_FLAGS);
 
        NativeFunctions.SetConsoleMode(consoleHandle, consoleMode);
    }
}
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
11.09.2025, 21:32

Не по теме:

Цитата Сообщение от skilllab Посмотреть сообщение
Есть некая серверная служба. Она запущена как консольное приложение и периодически туда чего то шлёт.
Запускать службы в виде консоли плохая идея априори.



Цитата Сообщение от skilllab Посмотреть сообщение
Так вот, есть большая доля вероятности, что кто-то тыкнет в консоль мышкой и в результате она превратится в ожидание ввода, что заблокирует вывод лога и по сути остановит программу ("консоль зависла").
Что-то не пойму про что вы. Под "зависла" подразумевается что консоль не будет проскроливать вывод самостоятельно? Или прям вот зависает на Console.WriteLine? Я не особо понимаю как этого можно добиться, можно какой-то минимальный прототип для воспроизведения поведения?

P.S. чисто технически поток ввода можно закрыть через Console.In.Close(); Так любой вызов ReadLine будет сразу падать с ошибкой.
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,234
11.09.2025, 21:51
Цитата Сообщение от Wolfdp Посмотреть сообщение
можно какой-то минимальный прототип для воспроизведения поведения?
Это же классика виндовой консоли, просто кликаешь мышкой, переводишь консоль в режим выбора текста.
Миниатюры
Как разморозить консоль  
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,051
Записей в блоге: 1
11.09.2025, 23:47  [ТС]
Цитата Сообщение от Wolfdp Посмотреть сообщение
плохая идея априори
Это debug mode. Так можно и нужно для службы. Я просто использую этот режим тоже, и тоже для отладки. Всё норм.

Цитата Сообщение от Wolfdp Посмотреть сообщение
консоль не будет проскроливать вывод самостоятельно
Да, и даже более, код не выполняется)) так как он пытается в WriteLine а оно не делается потому что консоль в ReadLine (или чего у неё там в режиме выбора).

Цитата Сообщение от Wolfdp Посмотреть сообщение
зависает на Console.WriteLine
Да. Я сам такое ранее не встречал, а оказалось вон...особенность винды.

Добавлено через 3 минуты
Цитата Сообщение от Wolfdp Посмотреть сообщение
можно какой-то минимальный прототип для воспроизведения поведения?
В теме, которую я привёл выше, показано как консоль переключать в режимы. У меня ща Win11 и дома, у неё чот всё по-русски и такого пункта в меню не найти.
А так, да код то из 1 простого цикла, печатающего стотыщмильёнов цифр и руки пользователя, решившего что-то выделить или ткнуть мышкой.

Добавлено через 1 минуту
Цитата Сообщение от Wolfdp Посмотреть сообщение
любой вызов ReadLine будет сразу падать с ошибкой
Мне такое не надо, я не просил))
Цитата Сообщение от skilllab Посмотреть сообщение
Я встраиваюсь в ... службу ... и выполняю очень долгую ... операцию ... По завершении моих действий консоль/служба продолжают работать дальше.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
12.09.2025, 00:32
Цитата Сообщение от IamRain Посмотреть сообщение
Это же классика виндовой консоли, просто кликаешь мышкой, переводишь консоль в режим выбора текста.
Первоначально тыкал на windows 11, там иной терминал и несколько иначе всё. На десятке действительно стопорится на WriteLine.

Цитата Сообщение от skilllab Посмотреть сообщение
Это debug mode. Так можно и нужно для службы. Я просто использую этот режим тоже, и тоже для отладки. Всё норм.

Не по теме:

Ну если кактус вкусный, то кто я такой чтобы запрещать его грызть


ИМХО, консоль нормально применима только локально для разработки, чтобы не подымать сервис и можно было спокойно подхватывать дебагом. Ну или хотя бы максимально изолировать окружение, например выделить специального юзера чисто под сервис, и запускать исключительно с его учётки. В противном случае с таким же успехом эту неприкасаемую консоль могут и просто закрыть.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3439 / 2759 / 575
Регистрация: 04.09.2018
Сообщений: 8,685
Записей в блоге: 3
12.09.2025, 12:30
skilllab, знакома такая ситуация. И да, обычная консоль на 10-тке действительно так себя ведет, как описано выше.
Что я делал:
- запускал консоль не показывая ее окна;
- перенаправлял вывод в "свою консоль", в которую тыкать можно везде и всегда - она на это не реагирует..
- механизм прокрутки до самого последнего сообщения;
- вывод из основной консоли всегда виден. Профит!
0
Эксперт .NET
 Аватар для Usaga
14319 / 9404 / 1356
Регистрация: 21.01.2016
Сообщений: 35,468
12.09.2025, 13:11
Цитата Сообщение от skilllab Посмотреть сообщение
Есть некая серверная служба.
А почему эта служба запускается не как служба?
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,051
Записей в блоге: 1
12.09.2025, 14:13  [ТС]
wizard41, я лишь сборка в домене сторонней службы которая запущена вот сейчас как консолька Rius, показал решение. И оно работает как надо.

Цитата Сообщение от Usaga Посмотреть сообщение
А почему эта служба запускается не как служба?
Всё уже написал. Хошь, запускай exe консольное, а хошь запускай exe НЕ консольное как службу виндовс. В первом случае ты онлайн видишь что творится, во втором случае только через чтение лога.
Цитата Сообщение от skilllab Посмотреть сообщение
Потому как службу можно запустить и по другому, без консоли.
Да хосспади, ответ мне дали. Детали не важны))) представьте что я пишу в лог файл одновременно с каким то сторонним приложением, и я являюсь частью этого приложения. Но есть некий пользователь, которому ну очень надо взять файл лога на редактирование и не отпускать его. Вот то же самое, тока у меня в консоли.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.09.2025, 14:13
Помогаю со студенческими работами здесь

Как запустить консольное приложение (например C:\Windows\System32\ping.exe) через консольное приложение?
Как запустить консольное приложение (например C:\Windows\System32\ping.exe) через консольное...

Отобразить в консоли:увеличить и уменьшить длину массива на заданное ранее из консоли число
Доброго дня суток, исходный код и задача есть Подскажите пж, не получается реализовать некоторые...

Как создать программу которую можно открывать как и консоль и как WPF?
Как создать программу которую можно открывать как и консоль и как WPF?

Приложение должно работать как консольное, и как WinForm
Здравствуйте. Появилась такая проблема: Имеется приложение, которое просит выбрать стиль...

Как сделать ввод чтобы был с задержкой как в консоли только в форме
У меня такой вопрос как сделать ввод с задержкой не в консоли чтобы при нажатии на кнопку вводился...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

Новые блоги и статьи
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru