我正在尝试编写一个代码,该代码将从命令提示符运行命令并显示命令的输出。基本上,如果窗口服务正在运行或停止,该命令将检查窗口服务的状态。这是代码:
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应用程序遇到错误,服务器终止了该过程。
不确定这里还缺少什么。
答案 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";
}