2010-07-21 3 views
3

Je vais précompiler une application asp.net dans mon formulaire C# personnalisé. Comment puis-je récupérer les journaux de processus et vérifier si le processus est réussi ou non?Comment obtenir le journal de Process.Start

Voici mon code

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); 

Merci!

Répondre

4

Définir vos ProcessStartInfo.RedirectStandardOutput à true - ce redirigera toutes les sorties à Process.StandardOutput, qui est un flux que vous pouvez lire pour trouver tous les messages de sortie:

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(); 

Vous pouvez également utiliser l'événement OutputDataReceived d'une manière similaire à ce que décrit @Bharath K dans sa réponse.

Il existe des propriétés/événements similaires pour StandardError - vous devez également définir RedirectStandardError à true.

+0

La classe ProcessStartInfo ne possède pas de méthode appelée Start() et StandardOutput()? –

+0

@Martin Ongtangco - Non, ce n'est pas le cas. 'Process' fait. Voir ici: http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo_methods.aspx – Oded

+0

Salut, je reçois cette erreur, mais aucun détail pour m'aider ... "Le système Impossible de trouver le fichier spécifié " –

2

Dans votre registre d'application source pour l'événement 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(); 

Toute erreur renvoyée dans l'application cible peut écrire des données dans ce. Quelque chose comme ceci:

Console.Error.WriteLine(errorMessage) ; 
Questions connexes