从我的应用程序内部运行cmd命令

时间:2014-12-09 17:46:16

标签: c# cmd

我想使用C#表单创建一个应用程序。表单有多个标签显示信息,一个按钮可以单击并显示该标签上的信息。所有标签都会显示可以使用cmd找到的信息。程序执行时cmd不会显示。

例如:

如果我需要主板信息。它可以使用cmd命令" wmic baseboard get product,manufacturer"(不带引号)来完成。我想通过点击按钮在我的C#表单标签上显示相同的信息。这需要隐藏cmd窗口。

2 个答案:

答案 0 :(得分:0)

针对http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo%28v=vs.110%29.aspxhttp://msdn.microsoft.com/en-us/library/system.diagnostics.process(v=vs.110).aspx

引用以下代码
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(yourCmd, yourCmdArguments);
psi.RedirectStandardOutput = false;
psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
psi.UseShellExecute = true;
System.Diagnostics.Process externalProcess;
externalProcess = System.Diagnostics.Process.Start(psi);
externalProcess.WaitForExit();

答案 1 :(得分:0)

您可以使用ProcessStartInfo和Process类来运行此应用程序并将标准输出重定向到您自己的方法。

设置RedirectStandardOutput将使Process提升您可以轻松处理的OutputDataReceived事件。

P.S。注意使用Arguments来提供参数。

var psi = new ProcessStartInfo(@"wmic");
psi.Arguments = @"baseboard get product,manufacturer";
psi.WindowStyle = ProcessWindowStyle.Hidden;
psi.UseShellExecute = false;
psi.RedirectStandardOutput = true;

string val = String.Empty;

var p = Process.Start(psi);
p.BeginOutputReadLine();
p.OutputDataReceived += delegate(object sender, DataReceivedEventArgs eventArgs)
{
    val += eventArgs.Data + "\r\n";
};
p.WaitForExit();

MessageBox.Show(val); // Start parsing it here