Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для skilllab
295 / 235 / 58
Регистрация: 03.02.2011
Сообщений: 2,045
Записей в блоге: 1
.NET 6

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

11.09.2025, 19:31. Показов 946. Ответов 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
13018 / 7584 / 1660
Регистрация: 25.05.2015
Сообщений: 23,050
Записей в блоге: 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
295 / 235 / 58
Регистрация: 03.02.2011
Сообщений: 2,045
Записей в блоге: 1
11.09.2025, 20:12  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
реально надо
Нет. Весь смысл службы как консоль в том, чтобы показывать отладочную и прочую информации. Ввод там не подразумевается. Потому как службу можно запустить и по другому, без консоли. И опять же, хошь - хоть войну и мир там печатай, но только после моего кода.
0
Эксперт .NET
 Аватар для Rius
13018 / 7584 / 1660
Регистрация: 25.05.2015
Сообщений: 23,050
Записей в блоге: 14
11.09.2025, 20:14
Цитата Сообщение от skilllab Посмотреть сообщение
Нет. Весь смысл службы как консоль в том, чтобы показывать отладочную и прочую информации. Ввод там не подразумевается.
А фича этого режима не только ввод, но и остановить постоянно убегающую прокрутку, выделить мышкой нужный участок и скопировать в буфер обмена.
0
 Аватар для skilllab
295 / 235 / 58
Регистрация: 03.02.2011
Сообщений: 2,045
Записей в блоге: 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
3782 / 1756 / 371
Регистрация: 15.06.2012
Сообщений: 6,516
Записей в блоге: 3
11.09.2025, 21:32

Не по теме:

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



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

P.S. чисто технически поток ввода можно закрыть через Console.In.Close(); Так любой вызов ReadLine будет сразу падать с ошибкой.
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,218
11.09.2025, 21:51
Цитата Сообщение от Wolfdp Посмотреть сообщение
можно какой-то минимальный прототип для воспроизведения поведения?
Это же классика виндовой консоли, просто кликаешь мышкой, переводишь консоль в режим выбора текста.
Миниатюры
Как разморозить консоль  
0
 Аватар для skilllab
295 / 235 / 58
Регистрация: 03.02.2011
Сообщений: 2,045
Записей в блоге: 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
3782 / 1756 / 371
Регистрация: 15.06.2012
Сообщений: 6,516
Записей в блоге: 3
12.09.2025, 00:32
Цитата Сообщение от IamRain Посмотреть сообщение
Это же классика виндовой консоли, просто кликаешь мышкой, переводишь консоль в режим выбора текста.
Первоначально тыкал на windows 11, там иной терминал и несколько иначе всё. На десятке действительно стопорится на WriteLine.

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

Не по теме:

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


ИМХО, консоль нормально применима только локально для разработки, чтобы не подымать сервис и можно было спокойно подхватывать дебагом. Ну или хотя бы максимально изолировать окружение, например выделить специального юзера чисто под сервис, и запускать исключительно с его учётки. В противном случае с таким же успехом эту неприкасаемую консоль могут и просто закрыть.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3378 / 2680 / 573
Регистрация: 04.09.2018
Сообщений: 8,493
Записей в блоге: 3
12.09.2025, 12:30
skilllab, знакома такая ситуация. И да, обычная консоль на 10-тке действительно так себя ведет, как описано выше.
Что я делал:
- запускал консоль не показывая ее окна;
- перенаправлял вывод в "свою консоль", в которую тыкать можно везде и всегда - она на это не реагирует..
- механизм прокрутки до самого последнего сообщения;
- вывод из основной консоли всегда виден. Профит!
0
Эксперт .NET
 Аватар для Usaga
14073 / 9290 / 1347
Регистрация: 21.01.2016
Сообщений: 34,872
12.09.2025, 13:11
Цитата Сообщение от skilllab Посмотреть сообщение
Есть некая серверная служба.
А почему эта служба запускается не как служба?
0
 Аватар для skilllab
295 / 235 / 58
Регистрация: 03.02.2011
Сообщений: 2,045
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru