Что может быть хорошим способом для сбора данных из командной строки в приложении C # Winforms? - PullRequest
3 голосов
/ 15 апреля 2011

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

Я создаю приложение C # Windows Forms, которое следит за всей сетевой статистикой компьютера. Это можно сделать, введя «netstat» в командную строку, но для обычного пользователя компьютера в наши дни этот черный прямоугольник довольно устрашающий, и выходные данные не обновляются регулярно, вместо этого пользователю приходится повторно вводить команду, чтобы получить максимальную отдачу. актуальная информация.

То, что я хочу сделать, это иметь код, который запускается каждую секунду, чтобы использовать команду «netstat -noa» в командной строке и передавать данные обратно в элемент управления DataGridView со столбцами «PID», «Внешний адрес». "и" Состояние процесса ". Проблема в том, что я никогда не делал много, используя командную строку в приложении с графическим интерфейсом, и не имею ни малейшего понятия о том, как получить текстовую таблицу, которая всплывает в команде организованным способом и в мои столбцы DataGridView. Я полагаю, что на сайте могла быть одна похожая публикация, но я также считаю, что она могла быть основана на Linux.

Спасибо всем за помощь!

Редактировать: Вау, я не ожидал так много информации после двух часов! Вы, ребята, великолепны! Здесь было намного лучше, чем на -shiver- других сайтах. Я действительно с нетерпением жду возможности попробовать личную реализацию netstat для приложения и / или улучшить Windows PowerShell. Однако до завтра я не смогу что-либо предпринять, потому что уже поздно, где я. Полагаю, посмотрим, что получится завтра. Приветствую всех.

Ответы [ 6 ]

3 голосов
/ 15 апреля 2011

Я знаю, что вы пометили c #, но вы когда-нибудь рассматривали возможность использования Powershell? Это в значительной степени идеально подходит для запроса данных из чужих ящиков.

Рекомендуемое чтение: http://blogs.msdn.com/b/spike/archive/2010/02/04/how-to-query-for-netstat-info-using-powershell.aspx

В качестве альтернативы, Google для: powershell netstat


С точки зрения C # вы, вероятно, хотите GetActiveTcpConnections ():

http://msdn.microsoft.com/en-us/library/system.net.networkinformation.ipglobalproperties.getactivetcpconnections(v=VS.80).aspx

1 голос
/ 15 апреля 2011

очистка выходных данных командной строки - это один из подходов - вот сообщение стека о потоке о копировании и вставке из окна консоли

более существенным подходом будет создание собственной реализации netstat как этот парень сделал

0 голосов
/ 15 апреля 2011

Вы можете использовать System.Diagnostics.Process и установить для RedirectStandardOutput startinfo значение true.Таким образом, вы сможете получить StandardOutput в качестве потокового считывателя.Убедитесь, что для свойства UseShellExecute установлено значение false, а для свойства CreateNoWindow - значение true.

0 голосов
/ 15 апреля 2011

Тогда будущая версия Windows изменит формат вывода netstat и сломает вашу программу.Вместо того, чтобы взламывать скрининг, почему бы вам просто не вызвать реальные API-интерфейсы Windows, которые предоставят вам данные, которые вы ищете?Для этого Windows Managmenent Instrumentation .

Как получить доступ к статистике Ethernet, подобной netstat, из программы Windows

0 голосов
/ 15 апреля 2011

Немного хак, но вы можете перенаправить вывод netstat в файл "netstat -noa> c: \ netstat.txt", а затем загрузить файл и проанализировать его ...

0 голосов
/ 15 апреля 2011

Используйте Process для запуска команды и захвата ее вывода:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...