从命令提示符运行命令并获取输出

时间:2018-04-17 14:05:35

标签: c# command command-prompt

我正在尝试编写一个代码,该代码将从命令提示符运行命令并显示命令的输出。基本上,如果窗口服务正在运行或停止,该命令将检查窗口服务的状态。这是代码:

Process process = new System.Diagnostics.Process();
ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();

startInfo.FileName = @"cmd.exe";
startInfo.Arguments = "sc query \"My Service\" | findstr STATE";
process.StartInfo = startInfo;
process.StartInfo.RedirectStandardOutput = true;
process.Start();

while (!process.StandardOutput.EndOfStream)
{
    string line = process.StandardOutput.ReadLine();
}

如果我在命令行上运行命令:

sc query "My Service" | findstr STATE

这让我回报:

STATE              : 1  STOPPED

但是,如果我在上面运行我的c#代码,没有任何反应,一段时间后我的浏览器会抛出错误:

  

HTTP错误502.3 - 错误的网关   指定的CGI应用程序遇到错误,服务器终止了该过程。

不确定这里还缺少什么。

1 个答案:

答案 0 :(得分:4)

为什么在使用简单代码完成时可以使用cmd?

 ServiceController[] services = ServiceController.GetServices();
 foreach(ServiceController service in services)
 {
  If (service.ServiceName == "name here")
  { 
Console.WriteLine(service.ServiceName+"=="+ service.Status);
 }}

或更好的版本:

  try
{
using( ServiceController sc = new ServiceController(name here) )
{
    return sc.Status == ServiceControllerStatus.Running;
}
}
catch( ArgumentException ) { return false; }
catch( Win32Exception ) { return false; }

另一种方式(OP最终提到他在网络应用程序中这样做:)):

  using System.ServiceProcess;

  ServiceController sc = new ServiceController(SERVICENAME);

  switch (sc.Status)
  {
    case ServiceControllerStatus.Running:
    return "Running";
  }