重定向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);

重定向Microsoft hotfix的标准输出

修复程序可能会写入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;
    }