C# 4.0 如何从windows服务读取控制台输出?

C# 4.0 如何从windows服务读取控制台输出?,c#-4.0,windows-services,console-application,C# 4.0,Windows Services,Console Application,我有控制台应用程序thirdpartyaapplications.exe,必须从windows服务运行。 控制台应用程序给我回复:OK,NotOK和ERROR 我需要在我的windows服务中捕获这些响应 我创建了一个函数 using (var p = new System.Diagnostics.Process()) { p.StartInfo.UseShellExecute = false; p.StartInfo.Redir

我有控制台应用程序thirdpartyaapplications.exe,必须从windows服务运行。 控制台应用程序给我回复:OK,NotOK和ERROR

我需要在我的windows服务中捕获这些响应

我创建了一个函数

 using (var p = new System.Diagnostics.Process())
        {
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.FileName = @"C:\ThirdPartyApplications.exe";
            p.StartInfo.Arguments = "3";
            p.Start();
            string o = p.StandardOutput.ReadToEnd();

            p.WaitForExit();
        }
如何捕获此输出

编辑

批处理文件是

@echo off
call run.bat %* 1>log\out.txt 2>log\err.txt
@echo code %ERRORLEVEL%
exit /B %ERRORLEVEL%
在这里,在我的变量o中,我没有得到消息“Code10”

如果我有

@ECHO off
ECHO Hello
PAUSE
在这里,我得到消息“你好”,但如果我改变批处理文件

@ECHO off
call run.bat %* 1>log\out.txt 2>log\err.txt
ECHO Hello
PAUSE
我没有收到“你好”的消息

有什么帮助吗

如何捕获此输出

仅当不作为服务运行时

Windows上的可执行文件必须调用特定的API(直接作为Win32应用程序或间接在.NET之类的框架下),如果它不调用这些API(例如,基于命令行开关1的逻辑),则它是正常的可执行文件

当作为服务运行时,可执行文件由服务控制管理器(SCM)启动,无法访问标准输出、错误或输入



1这在开发和调试服务时非常有用:一种“交互式”模式,允许从命令行或调试器中轻松运行。

您的代码有什么问题吗?它现在开始工作。但是,我现在有不同的情况。我有批处理文件
@echo off call run.bat%*1>log\out.txt 2>log\err.txt@echo退出,代码为%ERRORLEVEL%exit/B%ERRORLEVEL%
。当我从cmd启动时,我会得到退出代码,但在我的windows服务中,o是空的。什么是交互模式?@StayCool运行时会有大量控制台输出,不连接到服务控制管理器,以简化调试。服务作者实现的东西。我明白了。当我开始通过SCM运行应用程序时,即使是很小的bug也很难调试。我已经解决了这个问题,使用异常处理来处理所有可能的错误,并记录到eventLog(事先将eventLog源注册到应用程序中)
@ECHO off
call run.bat %* 1>log\out.txt 2>log\err.txt
ECHO Hello
PAUSE