代码之家  ›  专栏  ›  技术社区  ›  Martin Ongtangco

如何从进程获取日志。启动

  •  4
  • Martin Ongtangco  · 技术社区  · 14 年前

    我将以自定义C_窗体预编译一个ASP.NET应用程序。如何检索进程日志并检查它是否成功?

    这是我的密码

    string msPath = "c:\\WINDOWS\\Microsoft.NET\\Framework\\v2.0.50727\\";
    string msCompiler = "aspnet_compiler.exe";
    string fullCompilerPath = Path.Combine(msPath, msCompiler);
    msPath.ThrowIfDirectoryMissing();
    fullCompilerPath.ThrowIfFileIsMissing();
    
    ProcessStartInfo process = new ProcessStartInfo 
    { 
        CreateNoWindow = false,
        UseShellExecute = false,
        WorkingDirectory = msPath,
        FileName = msCompiler,
        Arguments = "-p {0} -v / {1}"
            .StrFormat(
                CurrentSetting.CodeSource,
                CurrentSetting.CompileTarget)
    };
    
    Process.Start(process);
    

    谢谢!

    2 回复  |  直到 14 年前
        1
  •  5
  •   Oded    14 年前

    设置你的 ProcessStartInfo.RedirectStandardOutput true -这将把所有输出重定向到 Process.StandardOutput ,这是一个可以读取以查找所有输出消息的流:

    ProcessStartInfo process = new ProcessStartInfo 
    { 
       CreateNoWindow = false,
       UseShellExecute = false,
       WorkingDirectory = msPath,
       RedirectStandardOutput = true,
       FileName = msCompiler,
       Arguments = "-p {0} -v / {1}"
                .StrFormat(
                  CurrentSetting.CodeSource, 
                  CurrentSetting.CompileTarget)
    };
    
    Process p = Process.Start(process);
    string output = p.StandardOutput.ReadToEnd();
    

    您也可以使用 OutputDataReceived 类似于@bharath k在回答中描述的事件。

    有类似的属性/事件 StandardError -你需要设置 RedirectStandardError 也。

        2
  •  2
  •   Bharath K    14 年前

    在ErrorDataReceived事件的源应用程序注册中:

    StringBuilder errorBuilder = new StringBuilder( );
    reportProcess.ErrorDataReceived += delegate( object sender, DataReceivedEventArgs e )
    {
        errorBuilder.Append( e.Data );
    };
    //call this before process start
    reportProcess.StartInfo.RedirectStandardError = true;
    //call this after process start
    reportProcess.BeginErrorReadLine( );
    

    在目标应用程序中引发的任何错误都可以将数据写入其中。像这样:

    Console.Error.WriteLine( errorMessage ) ;