2010-04-24 3 views
2

В диалоговом окне «Привязать к процессу» Visual Studio одним из столбцов в списке «Доступные процессы» является «Заголовок», в котором указано название самого верхнего окна, принадлежащего каждому процессу.Название окна для консольного приложения

Мы создаем несколько экземпляров нескольких серверных процессов, чтобы разделить работу. Для этих консольных процессов поле «Заголовок» пустое, поэтому в настоящее время мы должны искать идентификатор процесса в нашем инструменте управления, чтобы найти правильный процесс.

Чтобы упорядочить процесс отладки, я хотел бы иметь возможность использовать поле «Название», чтобы напрямую определить, какой процесс я хочу.

SetConsoleTitle не выполняет трюк, а SetWindowText с NULL hWnd. Насколько я знаю, консольное приложение не имеет собственных дескрипторов окон, которые мы могли бы передать SetWindowText. Мы не хотим создавать видимые окна для этих процессов сервера.

Любые предложения относительно разумного способа обмануть Visual Studio, чтобы отобразить здесь полезную информацию?

ответ

1

Я думаю, вам может быть не повезло. Окно консоли не относится к процессу консоли, но вместо этого относится к системному процессу (conhost.exe на win7 и, возможно, vista, csrss.exe до этого), поэтому, если Visual Studio просто ищет окна верхнего уровня процессов, t найдите окно консоли. Насколько я знаю, пока не поддерживается допрос консолей из proc, поэтому, видимо, нет видимого смысла визуальной студии видеть заголовок окон консоли.

Одним из возможных решений может быть создание окна верхнего уровня в вашем консольном процессе в качестве средства отладки. Возможно, вам захочется условно скомпилировать его, поэтому он доступен только тогда, когда вы отлаживаете. Просто создайте дополнительный поток, который накачивает сообщения и создает окно верхнего уровня. Если вы установите правильные стили, окно будет невидимым. Возможно, вы не захотите отправляться с окном в код, потому что в длинном сценарии сервера окна всегда увеличивают вашу поверхность атаки, пусть даже немного.

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

+0

Спасибо за совет! Я думал о невидимом окне, но моя работа с окнами в консольных программах до сих пор в значительной степени была сосредоточена на том, чтобы «появление этого диалога на сервере было BAD». О распределении работы: зависит от контекста. Процессы масштабируются на несколько физических машин лучше, чем потоки. Процессы минимизируют воздействие сбоев сервера на клиентскую сторону; явно меньше проблем в производстве, чем это было до запуска. Я могу отлаживать процесс, пока его друзья продолжают веселиться; Я не знаю, как отлаживать один поток, не приостанавливая все остальные потоки в этом процессе. – Timbo

Смежные вопросы