1 public class TaskProcess 2 { 3 [DllImport("kernel32.dll", SetLastError = true)] 4 public static extern int SetErrorMode(int wMode); 5 6 public Process process { get; set; } 7 8 public void Do() 9 { 10 try 11 { 12 int oldMode = SetErrorMode(3); 13 14 this.process = new Process(); 15 this.process.EnableRaisingEvents = true; 16 this.process.StartInfo.FileName = @"\\172.21.11.10\File\Platform\ExecuteFile\LSystem.exe"; 17 this.process.StartInfo.Arguments = @"8 \\172.21.11.10\File\Platform\Configuration\AppSettings.config 17 1 0"; 18 this.process.StartInfo.RedirectStandardError = true; 19 this.process.StartInfo.RedirectStandardInput = true; 20 this.process.StartInfo.RedirectStandardOutput = true; 21 this.process.StartInfo.CreateNoWindow = false; 22 this.process.StartInfo.ErrorDialog = false; 23 this.process.StartInfo.UseShellExecute = false; 24 this.process.Start(); 25 26 SetErrorMode(oldMode); 27 28 ThreadPool.QueueUserWorkItem(DoWork, process); 29 30 process.WaitForExit(); 31 32 Console.WriteLine("ExitCode is " + this.process.ExitCode); 33 } 34 catch (Exception ex) 35 { 36 Console.WriteLine(ex.Message); 37 Console.WriteLine(ex.StackTrace); 38 } 39 } 40 41 public ArrayList Out = ArrayList.Synchronized(new ArrayList()); 42 43 private void DoWork(object state) 44 { 45 Process process = state as Process; 46 47 if (process != null) 48 { 49 try 50 { 51 string line = process.StandardOutput.ReadLine(); 52 53 do 54 { 55 Out.Add(line); 56 57 line = process.StandardOutput.ReadLine(); 58 Console.WriteLine(line); 59 } 60 while (line != null); 61 62 process.StandardInput.WriteLine("exit"); 63 } 64 catch (Exception ex) 65 { 66 Console.WriteLine(ex.Message); 67 Console.WriteLine(ex.StackTrace); 68 } 69 } 70 } 71 }
参考文章:
http://stackoverflow.com/questions/673036/how-to-handle-a-crash-in-a-process-launched-via-system-diagnostics-process