我有控制台应用程序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
在这里,我收到消息“Hello”,但是如果我更改批处理文件
@ECHO off
call run.bat %* 1>log\out.txt 2>log\err.txt
ECHO Hello
PAUSE
我没有收到消息“你好”
任何帮助?
答案 0 :(得分:2)
如何捕获此输出?
仅在不作为服务运行时。
Windows上的可执行文件必须调用特定的API(直接作为Win32应用程序或间接在.NET之类的框架下),如果它不调用这些API(例如,基于命令行开关的逻辑 1 < / sup>)那么它是一个普通的可执行文件。
当作为服务运行时,可执行文件由服务控制管理器(SCM)启动,并且无法访问标准输出,错误或输入。
1 这在开发和调试服务时非常有用:一种“交互式”模式,允许从命令行或调试器中轻松运行。