在C#Winforms应用程序中从命令提示符收集数据的好方法是什么?

时间:2011-04-15 02:00:05

标签: c# winforms datagridview command-prompt

这是我作为会员在StackOverflow上的第一天,我不得不说我很享受这个网站背后的想法有多好!无论如何,问题是:

我正在创建一个C#Windows窗体应用程序,它会关注计算机的所有网络统计信息。这可以通过在命令提示符下输入“netstat”来完成,但是对于普通计算机用户来说,这个黑色矩形相当令人生畏,并且输出不会定期更新,而是用户必须重新键入命令才能获得最多最新信息。

我想要做的是每秒触发一次代码,在命令提示符中使用“netstat -noa”命令,并将数据反馈回DataGridView控件,其中包含列“PID”,“外部地址” “和”过程状态“。问题是,我从来没有在GUI应用程序中使用命令提示做了太多工作,并且完全不知道如何将弹出命令的文本表变为有组织的方式和我的DataGridView列。我相信网站上可能有一个类似的帖子,但我也相信它可能是基于Linux的。

感谢大家的帮助!

编辑:哇,两小时后我没想到这么多的投入!你们真棒!这里的体验比在-shiver- 其他网站上好多了。我真的很期待为应用程序尝试个人netstat实现和/或加速Windows PowerShell。但是,直到明天我才能尝试任何事情,因为我现在已经很晚了。我想我们明天会看到什么有用。为每个人欢呼。

6 个答案:

答案 0 :(得分:3)

我知道你已经标记了c#,但你有没有考虑使用Powershell?它非常适合从外国盒子请求数据。

建议阅读: http://blogs.msdn.com/b/spike/archive/2010/02/04/how-to-query-for-netstat-info-using-powershell.aspx

或者,google for:powershell netstat


就C#而言,您可能需要GetActiveTcpConnections():

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

答案 1 :(得分:1)

抓取命令提示符的输出是一种方法 - 这是关于copy & pasting from a console window

的stackoverflow帖子

更实质的方法是构建自己的netstat实现like this guy did

答案 2 :(得分:0)

使用Process运行命令并捕获其输出:

答案 3 :(得分:0)

有点乱,但你可以将netstat的输出重定向到文件“netstat -noa> c:\ netstat.txt”,然后加载文件并解析它......

答案 4 :(得分:0)

然后,未来版本的Windows将更改netstat输出的格式,它将破坏您的程序。而不是做一个“屏幕抓取”黑客为什么不调用实际的Windows API来为您提供您正在寻找的数据?这就是Windows Managmenent Instrumentation的用途。

How can I access netstat-like Ethernet statistics from a Windows program

答案 5 :(得分:0)

您可以使用System.Diagnostics.Process并将 startinfo RedirectStandardOutput 属性设置为true。这样,您就可以将 StandardOutput 作为流读取器。确保将 UseShellExecute 属性设置为false,将 CreateNoWindow 属性设置为true。