gpt4 book ai didi

c# - 重定向 Microsoft 修补程序的标准输出

转载 作者:行者123 更新时间:2023-11-30 17:18:28 25 4
gpt4 key购买 nike

我目前正在尝试编写一个 dll,通过 vbscript 处理 MS 修补程序的安装。到目前为止,我已经设法让核心功能正常工作,并设法捕获返回码,但我想更进一步——我需要捕获进程的输出,因为返回码并不总是正确的(即,如果不需要修补程序,它仍然返回 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;
}

关于c# - 重定向 Microsoft 修补程序的标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5765379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com