我目前正在尝试编写一个通过vbscript处理MS修补程序的DLL。到目前为止,我已设法使核心功能正常工作并设法捕获返回代码但又想更进一步 - 我需要捕获进程的输出,因为返回代码并不总是正确的(即,如果是不需要修补程序,它仍然返回0的返回代码 - 不好)。
下面是我用来启动进程并将输出写入事件日志的一些代码的副本,但是它一直写一个空白值...任何想法我做错了什么?
Process p = new Process();
p.StartInfo.FileName = strExe;
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.UseShellExecute = false;
p.Start();
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
WriteEvent(strAppName, "Error", 1000, output);
答案 0 :(得分:2)
此修补程序可能是写入StandardError而不是StandardOutput。这是我在需要捕获两种输出时使用的方法:
/// <summary>
/// run a program using the provided ProcessStartInfo
/// </summary>
/// <param name="processInfo"></param>
/// <returns>Both StandardError and StandardOutput</returns>
public static string WithOutputRedirect(System.Diagnostics.ProcessStartInfo processInfo)
{
string result = "";
processInfo.CreateNoWindow = true;
processInfo.UseShellExecute = false;
processInfo.RedirectStandardError = true;
processInfo.RedirectStandardOutput = true;
System.Diagnostics.Process p = System.Diagnostics.Process.Start(processInfo);
p.ErrorDataReceived += delegate(object o, System.Diagnostics.DataReceivedEventArgs e)
{
if (e.Data != null && e.Data != "")
{
result += e.Data + "\r\n";
}
};
p.BeginErrorReadLine();
p.OutputDataReceived += delegate(object o, System.Diagnostics.DataReceivedEventArgs e)
{
if (e.Data != null && e.Data != "")
{
result += e.Data + "\r\n";
}
};
p.BeginOutputReadLine();
p.WaitForExit();
return result;
}