重定向Microsoft hotfix的标准输出
本文关键字:标准输出 hotfix Microsoft 重定向 | 更新日期: 2023-09-27 17:52:50
我目前正在尝试编写一个dll,通过vbscript来处理MS hotfix的安装。到目前为止,我已经设法获得核心功能的工作,并设法捕获返回代码,但想更进一步-我需要捕获过程中的输出,因为返回代码并不总是正确的(即。如果不需要热修复,它仍然返回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);
修复程序可能会写入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;
}