c#-4.0 - 你如何读取windows服务的控制台输出?

标签 c#-4.0 windows-services console-application

我有控制台应用程序 ThirdPartyApplications.exe,我必须从 Windows 服务运行。
控制台应用程序给我休息:好的,不正常和错误。

我需要在我的 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();
        }

如何捕获此输出?

编辑
 using (var p = new System.Diagnostics.Process())
        {
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.FileName = @"C:\ThirdPartyBatch.bat";
            p.StartInfo.Arguments = "file.zip -user.properties";
            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 中,我没有收到消息“代码 10”

如果我有
@ECHO off
ECHO Hello
PAUSE

在这里,我收到消息“你好”,但如果我更改批处理文件
@ECHO off
call run.bat %* 1>log\out.txt 2>log\err.txt
ECHO Hello
PAUSE

我没有收到消息“你好”

有什么帮助吗?

最佳答案

How can I capture this output?



仅当不作为服务运行时。

Windows 上的可执行文件必须调用特定的 API(直接作为 Win32 应用程序或在 .NET 等框架下间接调用),如果它不调用这些(例如基于命令行 switch1 的逻辑),那么它就是一个普通的可执行文件。

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

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

关于c#-4.0 - 你如何读取windows服务的控制台输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8502780/

相关文章:

c# - 带有 AutoResetEvent 的 Windows 服务

email - Hudson - 在 Windows 服务上为电子邮件启用 TLS

asp.net - Crystal Report Viewer 按钮在 Google Chrome 和 Firefox 中不起作用,但在 IE 中正常

tomcat - 将应用程序作为服务运行或将其部署在容器上有什么区别?

c# - 在字典内部的字典中添加键值对

java - 用控制台字符删除多条控制台行

.net - 使用 Windows.Forms.Webbrowser.Navigate() 时禁用 Javascript 弹出窗口

c# - 在主机服务器上运行控制台应用程序

c# - C# 中不可修改的列表

c# - 如何解决 linq 中的以下问题?